用C语言中的strtol逐行读取文本文件

用C语言中的strtol逐行读取文本文件,c,text-files,average,strtol,line-by-line,C,Text Files,Average,Strtol,Line By Line,好的,我有一个函数,它找到一个文件中所有数字的平均值: float averageOfNumbers(FILE *fp_in) { int n=0,S=0; char red[1024];char *ptr; int p_a_h; float sr; while(!feof(fp_in)){ if(fgets(red,1024,fp_in)!=NULL){ ptr =red; while(p_a_h = strtol(pt

好的,我有一个函数,它找到一个文件中所有数字的平均值:

float averageOfNumbers(FILE *fp_in)
{
    int n=0,S=0;
    char red[1024];char *ptr;
    int p_a_h;
    float sr;

    while(!feof(fp_in)){
    if(fgets(red,1024,fp_in)!=NULL){
        ptr =red;
    while(p_a_h = strtol(ptr, &ptr, 10)){

        if((p_a_h>0&&S>INT_MAX-p_a_h)||(p_a_h<0&&S<INT_MIN-p_a_h)){
            printf("OVERFLOW\n");
            break;
        }
        else{
        S=p_a_h+S;
        n++;}

        }
    }
    }
    sr=S/n;
    return sr;
}

平均值应为:310422

在<代码>如果条件中添加额外检查

p_a_h==0 && (strlen(ptr)>1 || (strlen(ptr)==1 && ptr[0]!='0'))
如果转换无效(如果字符串包含非数字字符),则
strtol
返回
0L
。但如果实际字符串包含
0
,则仅检查此项也会跳过。剩下的我自己去理解。

以上。
p_a_h==0 && (strlen(ptr)>1 || (strlen(ptr)==1 && ptr[0]!='0'))