我有一个数据文件
12345678
3.78 <<GPA
3
20.5
87654321
2.65 <<GPA
2
19.25
08651234
3.10 <<GPA
1
18.0
11112222
3.95 <<GPA
4
22.5
22223234
2.45 <<GPA
3
19.3333
我应该怎样做才能fscanf()
所有GPA值?
我必须使用函数来fscanf()
值,我不能只是fscanf(infile, "%lf%lf", &unsaved, &save);
请帮助我,谢谢!
答案 0 :(得分:0)
为了在GPA
格式字符串中只读取fscanf
分配抑制其他参数,您需要一个类似于fscanf (fp, "%*lf%lf%*s%*lf%*lf*", &save);
的格式字符串。您必须考虑数据块中的sting字符,否则您将遇到{strong>输入失败 fscanf
。在函数中使用GPA
隔离fscanf
的示例如下:
#include <stdio.h>
#include <stdlib.h>
void readgpa (char *filenm)
{
FILE *fp = fopen (filenm, "r");
if (!fp) {
fprintf (stderr, "\n Error, invalid filename '%s'\n\n", filenm);
exit (1);
}
int cnt = 0;
double save;
while (fscanf (fp, "%*lf%lf%*s%*lf%*lf*", &save) != -1)
{
cnt++;
printf (" line: %d GPA: %.2f\n", cnt, save);
}
if (fp) fclose (fp);
}
int main (int argc, char **argv) {
if (argc < 2) {
fprintf (stderr, "\n Error, insufficient input. Usage: %s filename\n\n", argv[0]);
return 1;
}
readgpa (argv[1]);
return 0;
}
<强>输出:强>
$ ./bin/gpa dat/gpa.dat
line: 1 GPA: 3.78
line: 2 GPA: 2.65
line: 3 GPA: 3.10
line: 4 GPA: 3.95
line: 5 GPA: 2.45