我做错了什么(带file.txt的c语言)
以下是一个练习: 我有一个我做错了什么(带file.txt的c语言),c,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,
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);
}
#包括
#包括
#包括
int main()
{
文件*in;
in=fopen(“file.txt”,“r”);
int arr[100],i=0,j,最大值;
while(fscanf(in、%d、&arr[i]!=EOF)){
i++;
}
arr[0]=最大值;
对于(j=1;j
将是
fscanf(in,"%d",&arr[i]) != EOF
但也存在其他问题
- 不检查
fopen
的返回值
if(in != NULL ){
/* File opened correctly */
}
- 访问数组时没有保护。如果
i>=100
将出现数组索引越界错误,导致未定义的行为
- 您忘记声明initialize
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);
“代码块无法执行程序”不是一个问题描述……为什么不是?它给了您什么错误?您的帖子将完整引用它。arr[0]=max;
初始化的max
在哪里?如果避免在数组中记录数字,将为您节省大量的麻烦。您不必为了自己的目的而这样做——您可以在进行计数时跟踪最小值和最大值,而无需在后续读取中保留单个数字。我是j我只想在你的问题部分提到第三点。注意:-)不关闭文件可能是一个样式问题,但是如果程序正常终止,可以依靠任何打开的文件自动关闭。@JohnBollinger.:这是一个很好的做法。@coderredoc:fscanf也有其他问题,因为不能完全相信用户提供的输入文件包含数字。Worth menti我也是。@sjsam.:嗯。。是的。编辑过。
fclose(in);