有以下练习:
我有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无法执行该程序。
答案 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);