【问题标题】:Fill an array of strings until a sentinel value is found填充一个字符串数组,直到找到一个标记值
【发布时间】:2016-02-20 04:12:48
【问题描述】:

我正在尝试将字符串读入数组,直到用户输入标记字符串“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;
}

【问题讨论】:

  • 您的问题不清楚。你是什​​么意思“忽略哨兵”?你还没有告诉我们你想用非哨兵数据做什么。 “我的数组将输入的哨兵值输入到我创建的数组中”。嗯?数组“获取输入的哨兵”是什么意思?如果您提供一些输入和预期输出或预期行为的可靠示例,可能会有所帮助。
  • 我不清楚你想在这里做什么。我也强烈反对您尝试使用 typedef 技巧。 C 没有字符串,你只是试图假装它有,从而使你的代码更难调试。
  • @stevie 我试图猜测你的意图。如果我弄错了,请随时回滚或修改。

标签: c arrays 2d sentinel


【解决方案1】:

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

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;
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多