我需要用C语言编写一个程序,读取包含多行文本的文件,每行都包含两个变量:一个数字(%f)和一个字符串:
EX: file.txt
============
24.0 Torino
26.0 Milano
27.2 Milano
26.0 Torino
28.0 Torino
29.4 Milano
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[])
{
int r, line = 0, found = 0;
float temp, t_tot = 0;
char loc[32];
FILE *fp;
fp = fopen(argv[1], "r");
if (fp == NULL)
{
printf ("Error opening the file\n\n'");
exit(EXIT_FAILURE);
}
if (argc == 3)
{
r = fscanf(fp, "%f %s\n", &temp, loc);
while (r != EOF)
{
line++;
if (r == 2)
{
if(strcmp(argv[2], loc) == 0)
{
t_tot += temp;
found++;
}
}
else
printf ("Error, line %d in wrong format!\n\n", line);
}
printf ("The average temperature in %s is: %.1f\n\n", argv[2], (t_tot/found);
}
}
该程序需要读取所有行并查找我在
argv [2]
中写的城市。然后它将告诉我该城市的平均温度,并通知我文件中是否有格式错误的行。该程序对我来说编译正确,但屏幕上没有任何输出……我该如何解决?在这种情况下使用
fscanf
正确吗,还是更好使用fgets
?我是一名学生,请以“学术”的方式解决它 :)
fgets
准备一个缓冲区;然后在循环中将检查EOF
替换为检查NULL
;最后,你需要手动解析缓冲区,找到第一个空格,将初始部分提供给atof
,并将其余部分复制到strdup
中。 - Sergey Kalinichenko