0%

C语言-sprintf-fscanf-EOF

这篇文章主要介绍sprintf/fscanf与EOF

sprintf/fscanf

fscanf() 和 fprintf() 函数与scanf() 和 printf() 功能相似,都是格式化读写函数,两者的区别在于 fscanf() 和 fprintf() 的读写对象不是键盘和显示器,而是磁盘文件。

如果将 fp 设置为 stdin,那么 fscanf() 函数将会从键盘读取数据,与 scanf 的作用相同;设置为 stdout,那么 fprintf() 函数将会向显示器输出内容,与 printf 的作用相同。

1
2
3
4
5
6
7
int fscanf ( FILE *fp, char * format, ... );
int fprintf ( FILE *fp, char * format, ... );
FILE *fp;
int i, j;
char *str, ch;
fscanf(fp, "%d %s", &i, str);
fprintf(fp,"%d %c", j, ch);

fprintf() 返回成功写入的字符的个数,失败则返回负数。fscanf() 返回参数列表中被成功赋值的参数个数。

1
int nscan = fscanf(fp, "%d %*d", &freq_khz);

这里的%*d是跳过写入的意思,只需要给freq_khz赋值,且赋读入的第一个值,读入的第二个值不用赋值给变量。

例如:

1
scanf(“%d%d%\*d%d”,&a,&b,&c);

需要输入4个数,跳过输入的第三个数据,也就是第1、2、4个数分别保存到a、b、c里面。

EOF

EOF 是 End Of File 的缩写,在 C 语言标准库中的定义如下:

1
#define  EOF  (-1)

对一些数据读取函数(如 fgetc 与 getc 函数)而言,如果读到文件末尾(也可以理解为“如果不能从文件中读取”,即文件已经读完或者文件读取出错),则返回一个整数(-1),这就是所谓的 EOF。

因此,EOF 宏不但能够表示读文件到了结尾这一状态(这种状态可以用 feof() 来检测),还能表示 I/O 操作中的读、写错误(通常可以用 ferror() 来检测)以及其他一些关联操作的错误状态。