c - 填充字符串数组,直到找到哨兵值

标签 c arrays 2d sentinel

我正在尝试将字符串读入数组,直到用户输入哨兵字符串,即“XXX”。
我不希望将哨兵值存储在数组中。如何避免将哨兵值放入数组中?

这是我到目前为止所拥有的:

#include <stdio.h>
#include <string.h>
#define MAXCHAR 15
typedef char string15[MAXCHAR+1];

void
getInputs(string15 word[], int *nElem)
{
    int i=0;
    while(i<30 && strcmp(word[i-1], "XXX")!=0)
    {
        printf("Input word %d: ", i+1);
        scanf("%s", word[i]);
        i++;

        if(i<=8 && strcmp(word[i-1], "XXX")==0)
        {
            printf("Below Minimum Count\n");
            printf("Input word %d: ", i);
            scanf("%s", word[i-1]);
        }
    }
    (*nElem)=i-1;
}

int main()
{
    int nElem;
    string15 word[30];
    getInputs(word, &nElem);

    return 0;
}

最佳答案

尝试尽可能少地编辑代码,同时使其有意义......

void getInputs(string15 word[], int *nElem)
{
    int i = 0;
    char buffer[128];
    while(i<30)
    {
        printf("Input word %d: ", i+1);
        fgets(buffer, 128, stdin);

        if (strcmp(buffer, "XXX\n") != 0) {
          strncpy(word[i], buffer, 15);
          i++;
        } else {
          if (i<=8) {
            printf("Below Minimum Count\n");
            continue;
          } else {
            break;
          }
        }
    }
    (*nElem) = i;
}

但说实话,还存在其他设计问题。例如,为什么您的函数不返回添加的字符串数量,而不是修改向您传递指针的整数?

关于c - 填充字符串数组,直到找到哨兵值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35519026/

相关文章:

c - 使用 shmat 和 shm_open

java - 在java中读取c程序的stdout

c - 如何加速我的代码?

python - 从数组中删除所有零

java - 在java中对二维数据结构进行排序

c - 用最大输入填充 C 中的 argv[1]

java - 如何检查数组是否为空/空?

从字节数组构造的 Java String 长度错误

c# - 如何将点移动给定距离 d(并获得新坐标)

graphics - 2D 图像旋转,几个问题