从文本文件读取整数并将其相加(C)

时间:2018-08-21 17:10:57

标签: c

我是C编程的初学者。我目前正在为考试做准备,但仍在参加课程。任务是从文本文件中读取内容,并计算其中的整数之和。该文件还包含字符。我已经尝试过将其作为一种解决方案,它几乎是正确的,但是有时它会增加一个整数很多次。

void calculate(char* file_name) {
    FILE* file;
    int sum = 0;
    int number;

    file = fopen(file_name, "r");
    char c;

    while ((c = fgetc(file)) != EOF) {
    if (fscanf(file, "%d", &number)) {
        printf("The number is %i\n  ", number);
        sum = suma + number;
    }   
    }   
    fclose(file);
    printf("The sum is %i\n", sum);
}

例如,文件中的文本为:

         asdd12 ddd15 dddgh51hh3
         3adb jk !!!*

此文件的总和应为84,但输出87。我的方法是完全错误的还是应该更改代码中的某些内容?

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

  

...我应该只更改代码中的某些内容吗?

while((c=fgetc(file))!=EOF)c无效,因此会丢失潜在的数字输入字符。

if( fscanf(file, "%d", &number))是一个问题,由于fscanf()返回非零值而导致文件结束时被愚弄,因此代码认为已读取数字。

请尝试使用3向分支。使用fscanf()中的结果值来指导后续步骤。

int conversion_count;
do {
  conversion_count = fscanf(file, "%d", &number);
  if (conversion_count == 1) {
    // scanf() found an `int`
    printf("The number is %i\n  ", number);
    sum = sum + number;
  } else if (conversion_count == 0) {
    // scanf() failed to finf an `int`.
    // Offending non-numeric input remains in `file`.
    // Read non-numeric input character and quietly toss it.
    fgetc(file); // 
  }
} while (conversion_count != EOF);

替代方法:健壮的代码将读取带有fgets()strtol()的一行文本以查找整数。