如何在C中读取文件中的数字直到EOF

如何在C中读取文件中的数字直到EOF,c,function,file,numbers,C,Function,File,Numbers,我有这个函数来查找uknown文本文件中数字的最大值和最小值(“ADS 50 d 15”)。它只对文件中的数字起作用,但如果有字符,它就会停止 { int n; int min = INT_MAX, max = INT_MIN; int flag = 0; rewind(f); while (fscanf(f, "%d", &n) != EOF) { if (ferror(f)) {

我有这个函数来查找uknown文本文件中数字的最大值和最小值(“ADS 50 d 15”)。它只对文件中的数字起作用,但如果有字符,它就会停止

{
    int n;
    int min = INT_MAX, max = INT_MIN;
    int flag = 0;
    rewind(f);

    while (fscanf(f, "%d", &n) != EOF)
    {

        if (ferror(f))
        {
            perror("Error:");
        }
        if (flag == 0)
        {
            min = n;
            max = n;
            flag = 1;
        }
        if (min>n)
            min = n;
        if (max<n)
            max = n;
    }
    printf("\nMax value: %d\nMin value: %d\n", max, min);
}
{
int n;
int min=int_MAX,MAX=int_min;
int标志=0;
倒带(f);
while(fscanf(f),%d,&n)!=EOF)
{
if(费罗(f))
{
佩罗尔(“错误:”);
}
如果(标志==0)
{
min=n;
max=n;
flag=1;
}
如果(最小值>n)
min=n;

if(maxfscanf将在到达文件末尾后返回EOF。成功扫描整数时,它将返回1。如果输入不是整数,它将返回0,并且必须删除有问题的输入

{
    int n;
    int min = INT_MAX, max = INT_MIN;
    int result = 0;
    char skip = 0;

    rewind ( f);
    while ( ( result = fscanf ( f, "%d", &n)) != EOF)
    {

        if (result == 0)
        {
            fscanf ( f, "%c", &skip);//remove a character and try again
        }
        else
        {
            if (min>n)
                min = n;
            if (max<n)
                max = n;
        }
    }
    printf("\nMax value: %d\nMin value: %d\n", max, min);
{
int n;
int min=int_MAX,MAX=int_min;
int结果=0;
字符跳过=0;
倒带(f);
而((结果=fscanf(f,%d,&n))!=EOF)
{
如果(结果==0)
{
fscanf(f、%c、&skip);//删除一个字符,然后重试
}
其他的
{
如果(最小值>n)
min=n;

如果(max尝试本演示程序中显示的以下方法。您必须使用
fscanf
而不是本程序中使用的
scanf

#include <stdio.h>
#include <ctype.h>

int main( void ) 
{
    int min, max;
    size_t n = 0;

    while ( 1 )
    {
        char c;
        int x = 0;

        int success = scanf( "%d%c", &x, &c );

        if ( success == EOF ) break;

        if (success != 2 || !isspace( ( unsigned char )c ) )
        {
            scanf("%*[^ \t\n]");
            clearerr(stdin);
        }
        else if ( n++ == 0 )
        {
            min = max = x;
        }
        else if ( max < x )
        {
            max = x;
        }
        else if ( x < min )
        {
            min = x;
        }
    }

    if ( n )
    {
        printf( "\nThere were enetered %zu values\nmax value: %d\nMin value: %d\n", 
            n, max, min );
    }

    return 0;
}
然后输出将是

There were enetered 6 values
max value: 8
Min value: 1

如果输入与整数不匹配,则fscanf返回0,而不是
EOF
。另外请注意,
ferror(f)
只能在
fscanf
已返回
EOF
时为真,因此您的
If
永远不会运行。
There were enetered 6 values
max value: 8
Min value: 1