Чтение текстовых файлов с strtol в C построчно
Итак, у меня есть эта функция, которая находит среднее значение всех чисел в файле:
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
1 ответ
Решение
Добавьте дополнительную проверку в if
состояние.
p_a_h==0 && (strlen(ptr)>1 || (strlen(ptr)==1 && ptr[0]!='0'))
Я использую тот факт, что strtol
возвращается 0L
если преобразование недопустимо (если строка содержит нецифровые символы). Но проверка только для этого, также пропускает, если фактическая строка содержит 0
, Я оставляю остальное, чтобы понять это самостоятельно.