fscanf在使用时需要注意其返回值,是否成功读取数据。否则可能没读成功,但是不报错,程序继续执行,用上一轮读取的数据继续操作。可能造成程序最终结果错误。
1 #include<stdio.h>
2
3 int main()
4 {
5 int a, b;
6 FILE* fin = fopen("in.txt", "r");
7 for(int i=0; i< 2; ++i) {
8 int r = fscanf(fin, "%d %d", &a, &b);
9 printf("%d\n", r);
10 printf("%d %d\n", a, b);
11 }
12 return 0;
13 }
当in.txt 为:
1 2
则输出结果:
2
1 2
-1
1 2
可见第一次循环时,fscanf成功读取2个数据,返回值为2。第二次循环时,fscanf并未读取到数据,返回值为-1,且变量a、b值并未改变。在实际代码中,此时程序继续执行,可能出现无法预料的后果。
故使用fscanf时,最好检查一下其返回值是否成功读取预期的数据。