这篇文章主要介绍sprintf/fscanf与EOF
sprintf/fscanf
fscanf() 和 fprintf() 函数与scanf() 和 printf() 功能相似,都是格式化读写函数,两者的区别在于 fscanf() 和 fprintf() 的读写对象不是键盘和显示器,而是磁盘文件。
如果将 fp 设置为 stdin,那么 fscanf() 函数将会从键盘读取数据,与 scanf 的作用相同;设置为 stdout,那么 fprintf() 函数将会向显示器输出内容,与 printf 的作用相同。
1 | int fscanf ( FILE *fp, char * format, ... ); |
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 |
对一些数据读取函数(如 fgetc 与 getc 函数)而言,如果读到文件末尾(也可以理解为“如果不能从文件中读取”,即文件已经读完或者文件读取出错),则返回一个整数(-1),这就是所谓的 EOF。
因此,EOF 宏不但能够表示读文件到了结尾这一状态(这种状态可以用 feof() 来检测),还能表示 I/O 操作中的读、写错误(通常可以用 ferror() 来检测)以及其他一些关联操作的错误状态。