【问题标题】:C fscanf problemC fscanf 问题
【发布时间】:2010-09-30 23:43:30
【问题描述】:

如果我打开一个文件并使用 fscanf 读取这样的文件:

2 41
1 50
1 46
....

如何告诉 C 读取第一个数字并将其存储为变量,然后将第二个数字存储为另一个变量,运行一个循环,然后继续下一组?

【问题讨论】:

  • 你尝试过什么吗?
  • 是的,我试过了:fscanf(buildingFile,"%d %d",&type, &stories);但我认为它不会将它们存储为不同的变量。
  • @Jesse 实际上是对的。
  • 当我这样做时,它似乎没有进入循环。我得到的只是一个闪烁的光标。
  • 我没有遇到循环问题,只是程序如何读取我打开的文件

标签: c scanf


【解决方案1】:

这样的循环就是你所追求的:

int type, stories;

while (fscanf(buildingFile, "%d %d", &type, &stories) == 2)
{
    printf("Got type=%d, stories=%d\n", type, stories);
    /* Do something with 'type' and 'stories' */
}

if (ferror(buildingFile))
{
    perror("buildingFile");
}

【讨论】:

    【解决方案2】:

    关于fscanf的一些指点:

    1. 始终检查返回值。如果您要求一个整数,如果扫描成功,它应该返回1。其他返回值包括0EOF,这可能表示读取失败,或者找不到与提供的模式匹配的数据。

    2. 除非格式规范包含[cn 说明符,否则通常会忽略空白字符。

    3. 始终检查返回值。


    while(1)
    {
        int result;
        int firstNumber;
        int secondNumber;
    
        result = fscanf (file, "%d%d", &firstNumber, &secondNumber);
        if (result == 2)
        {
            printf("Scanned two numbers, %d and %d\n", firstNumber, secondNumber);
        }
        else
        {
            if (result != EOF)
                puts("An error occurred");
            break;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      相关资源
      最近更新 更多