【问题标题】:Reading in grid of characters in C在C中读取字符网格
【发布时间】:2016-02-10 21:42:32
【问题描述】:

我正在为我的 C 课做一个单词搜索作业。我需要使用重定向运算符(例如

)从控制台读取字符网格

./a.out

我没有从文件中读取数据,所以我不需要使用文件操作。我需要读取此网格,然后将其存储在二维数组中。但是,我的代码只是读取网格的第一行并停止。这是我的代码:

int main(void) {
    char inputGrid[50][50];
    char solvedGrid[50][50];
    char inputString[50];
    char ch;

    int inputRow = 0;
    int rowLength = 0;
    int i = 0;

    size_t r;
    size_t c;

    scanf("%[^\n]%*c", inputString);
    rowLength = strlen(inputString);

    for (r = 0, c = 0; r <= rowLength; r++) {
        if (inputString[r] == '\n') {
            scanf("%[^\n]%*c", inputString);

            inputRow++;

            if (inputString[r] != ' ') {
                inputGrid[inputRow][c] = inputString[r];
                c++;
            }
        } else
        if (inputString[r] != ' ') {
            inputGrid[inputRow][c] = inputString[r];
            c++;
        }
    }

    // Print the array
    for (r = 0; r < strlen(inputString); r++) {
        for (c = 0; c < strlen(inputString); c++) {
            printf("%c", inputGrid[r][c]);
        }
        printf("\n");
    }
}

我需要以形成方阵的空格分隔字符的形式读取数据。任何帮助将不胜感激。

【问题讨论】:

    标签: c search word


    【解决方案1】:

    每次循环时,您都会增加r,即使您最多读取了一个字符。您可能会发现使用 嵌套循环 会更容易:一个循环来跟踪行/行,而其中的一个循环来处理该行/行中的每个字符。

    【讨论】:

      【解决方案2】:

      scanf("%[^\n]%*c", inputString) 不会将\n 存储在inputString 中,因此测试inputString[r] == '\n' 永远不会为真。

      你可以使用

          int i, r, c;
          while (scanf("%[^\n]%*c", inputString) > 0)
          {
              for (rowLength = i = 0; i < strlen(inputString); ++i)
                  if (inputString[i] != ' ')
                      inputGrid[inputRow][rowLength++] = inputString[i];
              if (++inputRow >= rowLength) break;
          }
      
          // Print the array
          for (r = 0; r < inputRow; ++r, printf("\n"))
              for (c = 0; c < rowLength; ++c)
                  printf("%c", inputGrid[r][c]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-21
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-22
        相关资源
        最近更新 更多