我做错了什么(c语言与file.txt)

时间:2018-01-10 15:52:09

标签: c

有以下练习:

我有file.txt包含许多未知数字,由一个或多个空格或新行分隔。(file.txt在我的程序的一个文件夹中。)

我必须找到总数量和最大值。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    FILE *in;
    in=fopen("file.txt","r");
    int arr[100],i=0,j,max;
    while(fscanf(in,"%d",&arr[i] != EOF)) {
        i++;
    }
    arr[0]=max;
    for(j=1;j<i;j++) {
        if(max < arr[j]) {
            max = arr[j];
        }
    }
    printf("Tot.number: %d\nMax: %d",i,max);
}

但是,codeblock无法执行该程序。

1 个答案:

答案 0 :(得分:3)

fscanf(in,"%d",&arr[i] != EOF)

将是

fscanf(in,"%d",&arr[i]) != EOF

但还有其他问题

  • 不检查fopen的返回值。

    if(in != NULL ){
       /* File opened correctly */
    }
    
  • 访问阵列时没有保护。 if i>=100如果数组索引超出绑定错误导致未定义的行为。

  • 您忘记声明初始化max

  • 您的意思是将max初始化为arr[0]。所以正确的是max = arr[0]。如果要查找最大值,则无法指定arr[0]的值。

  • 此外,您必须记住,如果fscanf没有返回EOF,那么除非您检查正确解析了2个值,否则无法释放它。 fscanf的输出应该等于1,因为正在读取一个值。

    int r = fscanf("%d",&arr[i]);
    if( r == 1 ){
       /* SUCCESS */
    }
    else if( errno ) {
       /* Error occured */
    }
    else if( r == EOF ){
       /* Either EOF reached or some I/O error. */
    }
    

还有其他事情(不是错误,而是良好做法)

  • 未关闭文件。

    fclose(in);