gpt4 book ai didi

c - C 中使用 strtol 逐行读取文本文件

转载 作者:行者123 更新时间:2023-11-30 17:36:41 25 4
gpt4 key购买 nike

好的,我已经有了这个函数,可以查找文件中所有数字的平均值:

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;
}

当文件中只有数字时它工作正常,但如果发现数字以外的任何内容,程序将崩溃。我怎样才能让程序忽略其他符号。例如,这是一个文本文件:

wdadwa 321 1231 das 421124 1 wdasdad 4 1412515
sad14312 yitiyt453534 3554312 sad -2 -53 -12 -231 #@!
#!312 -2 241 -46343 sada 21312 65454

平均值应为:310422

最佳答案

if 条件中添加额外的检查。

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

我正在利用这样一个事实:如果转换无效(如果字符串包含非数字字符),则 strtol 返回 0L。但如果实际字符串包含 0,单独检查这一点也会跳过。剩下的就留给大家自己理解吧。

关于c - C 中使用 strtol 逐行读取文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22589228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com