【问题标题】:Reading line by line in C and storing to array在C中逐行读取并存储到数组
【发布时间】:2017-04-24 02:39:51
【问题描述】:

我正在尝试读取具有上述格式输入的文本文件。我可以使用此代码阅读每一行:

FILE *file = fopen(argv[1], "r");
...

char * line = NULL;
size_t len = 0;
ssize_t read;
while ((read = getline(&line, &len, file)) != -1)

所以“行”等于文件中的每一行,如果我输出读取的内容,例如:我得到第一个输出为“1 2 3 4 5 6 7 8 9”。我如何将这些数字存储到二维数组中?如何在每个空间拆分并仅获取数字?

【问题讨论】:

  • 输入的数字总是9x9吗?
  • @BLUEPIXY 是的,总是。它是 9x9。
  • 在这种情况下,sscanf 似乎很容易使用。
  • @BLUEPIXY 你能推荐一个方法吗? ,我确实使用了 scanf 并且当所有输入都在一行中用空格分隔时很好,但是当它的 9 行时我不知道该怎么做
  • 我发布了一个使用 sscanf 作为答案的示例。

标签: c arrays input readfile getline


【解决方案1】:

使用sscanf的示例

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) {
    int numbers[9][9];
    FILE *file = fopen(argv[1], "r");
    char * line = NULL;
    size_t len = 0;
    ssize_t read;
    int rows = 0;
    while ((read = getline(&line, &len, file)) != -1){
        int *a = numbers[rows];
        if(9 != sscanf(line, "%d%d%d%d%d%d%d%d%d", a, a+1, a+2,a+3,a+4,a+5,a+6,a+7,a+8)){
            fprintf(stderr, "%s invalid format at input file\n", line);
            return EXIT_FAILURE;
        }
        if(++rows == 9)
            break;
    }
    fclose(file);
    free(line);
    //check print
    for(int r = 0; r < 9; ++r){
        for(int c = 0; c < 9; ++c)
            printf("%d ", numbers[r][c]);
        puts("");
    }
}

【讨论】:

    【解决方案2】:

    字符串是一个数组,因此您只想将字符串的内容一个字符一个字符地复制到另一个数组中,除非该字符不是字母数字。 您可以先进行一些检查以查看当前字符串中有多少个字母数字字符,然后为您的新数组获取该内存量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 2013-11-13
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多