【问题标题】:A way to fscanf on only the first line仅在第一行进行 fscanf 的方法
【发布时间】:2013-08-06 12:14:58
【问题描述】:

我一直在寻找一种方法来获取 2 个整数,用空格分隔,它们位于我将读取的文件的第一行中。我考虑过使用

fscanf(file, "%d %d\n", &wide, &high);

但是读取文件中任何位置的 2 个整数,如果第一行格式错误,则会给出错误的输出。我也尝试过使用

char line[1001];
fgets(line, 1000, file);

这似乎是最好的选择,只是它很笨拙。它给我留下了一个最多有几百个空格的字符串,我必须从中提取我宝贵的整数,更不用说检查格式错误了。

肯定有比这更好的选择吗?我会接受任何解决方案,但最强大的解决方案(对我而言)似乎只是第一行的fscanf。有什么办法吗?

【问题讨论】:

    标签: c fgets scanf


    【解决方案1】:

    您可以捕获紧跟在char 中的第二个数字之后的字符,并检查捕获的字符是否为'\n',如下所示:

    int wide, high;
    char c;
    if (fscanf(file, "%d%d%c", &wide, &high, &c) != 3 || c != '\n') {
        printf("Incorrect file format: expected two ints followed by a newline.");
    }
    

    这是demo on ideone

    【讨论】:

      【解决方案2】:

      这似乎是最好的选择,只是它很笨拙。

      不,它一点也不笨拙(除了你以错误的方式使用fgets() 的大小参数......)。这是非常好的和惯用的。 strtol() 做得很好:

      char line[LINE_MAX];
      fgets(line, sizeof line, file);
      
      char *endp;
      int width = strtol(line, &endp, 10);
      int height = strtol(endp, NULL, 10);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-11
        相关资源
        最近更新 更多