为只读GPA
与在fscanf
格式字符串附加参数赋值抑制,则需要类似fscanf (fp, "%*lf%lf%*s%*lf%*lf*", &save);
格式字符串。您必须考虑数据块中的刺痛字符,否则您将遇到输入故障和fscanf
。在一个函数使用fscanf
隔离GPA
的一个例子是:
#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
'的fscanf(infile中, “%* LF%LF%* LF%* LF”,&save); ' – BLUEPIXY 2014-09-20 23:15:51
使用'fgets'来读取文件中的行,'sscanf'来转换您关心的行上的值。 – user3386109 2014-09-20 23:16:14