8.2 文件结构化输入输出
当文本文件的格式很规整时,可以用格式字符串写入和读取字段。printf()、scanf() 面向控制台;文件版本就是 fprintf() 和 fscanf()。
c
fprintf(file_pointer, "format", values...);
fscanf(file_pointer, "format", addresses...);fprintf() 把格式化文本写到文件流里。第一个参数是 FILE *。
c
FILE *fp = fopen("scores.txt", "w");
fprintf(fp, "Ada %d\n", 96);
fprintf(fp, "Bob %d\n", 88);
fprintf(fp, "Cora %d\n", 91);
fclose(fp);这会生成一个简单的结构化文本文件:
text
Ada 96
Bob 88
Cora 91fscanf() 从文件流读取字段。它会返回成功解析的字段数量,所以循环条件应该检查这个返回值。
c
FILE *fp = fopen("scores.txt", "r");
char name[32];
int score;
int total = 0;
int count = 0;
while (fscanf(fp, "%31s %d", name, &score) == 2) {
total += score;
count++;
}
fclose(fp);
printf("average = %.1f\n", total / (double) count);把字符串读入数组时,要使用 %31s 这样的宽度限制。这个宽度会给结尾的 \0 留出空间。
fscanf() 适合每条记录都遵守同一种格式的文件。如果文件里可能有空行、注释、缺失字段或自由文本,通常应该先用 fgets() 读入整行,再决定如何解析。
正在加载交互实验...
正在加载概念检查...
正在加载本节练习...