一、fprintf与fscanf应用
#include <stdio.h>
#include <windows.h>
void write(){
FILE *fp = fopen("abc.c" , "w");
if(!fp){
perror("fopen error");
return;
}
fprintf(fp , "%d%c%d=%d\n",10,'*',8,10*8);
fclose(fp);
}
void read(){
FILE *fp = fopen("abc.c" , "r");
if(!fp){
perror("fopen error");
return;
}
int a,c,d;
char b;
fscanf(fp , "%d%c%d=%d" ,&a,&b,&c,&d);
printf("[%d][%c][%d][%d]\n\n",a,b,c,d);
fclose(fp);
}
int main(void){
write();
printf("写完毕\n\n");
system("pause");
printf("开始读:\n");
read();
system("pause");
return EXIT_SUCCESS;
}
写完毕
请按任意键继续. . .
开始读:
[10][*][8][80]请按任意键继续. . .
二、fscanf 和 fgets 的区别
while(1){
fscanf(fp , "%d\n" , &temp); //fscanf在读出时,会比较下一次是否满足格式匹配符。
if(feof(fp))
{
break;
}
a[i] = temp;
i++;
}
会导致有效数字少数出一个。原因是他会在这次读出时判断下一次的读出是否满足格式匹配符 %d\n ,temp没来得及赋值给a[i]就break了。