Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我做错了什么(带file.txt的c语言)_C - Fatal编程技术网

我做错了什么(带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);