关于C程序的文件输入输出

C程序把输入输出看作是字节流。输入流可以来源于文件、输入设备(键盘);输出流的目的地也可以是文件、输出设备(屏幕)。

C如何解释输入流或输出流取决于所使用的输入/输出函数。程序可以不做任何改变地读取和存储字节,或者把字节流依次解释成字符。类似的,对于输出,所使用的函数决定了字节流是被原样转移,还是被解释为字符。

1. fread() & fwrite()函数

如果要在不失精度的前提下保存或恢复数值数据,要使用二进制模式及fread()和fwrite()。通常用于二进制文件。

C把输入视为字节流。使用fread()函数,C把输入看作是二进制值并将其存储在指定存储位置(如变量中)。

类似的,C把输出也视为字节流,使用fwrite()函数,C将二进制数据(如变量的值)直接放入输出流。

double num = 0.33;
FILE *f = fopen("value.dat", "wb"); //以二进制写模式打开文件
fwrite(&num, sizeof(double), 1, f); //将num的二进制数值写入文件
fclose(f);
double value = 0;
f = fopen("value.dat", "rb"); //以二进制读模式打开文件
fread(&value, sizeof(double), 1, f); //从文件中读取二进制值存入double变量value

2. fscanf() & fprintf()相关函数

通常用于文本文件。

如果使用fscanf()/getc()/fgets()或其他相关函数,C则将每个输入字节看作是字符码。然后fscanf()和scanf()函数尝试把这些字符码翻译成转换说明(占位符)指定的其他类型。注:对于字符串常量,如“kanxiao”,C将其视为该字符串常量的地址。

类似的,fprintf()/fputs()/putc()等相关函数将非字符数据转换成字符表示后,才将其放入输出流。

FILE *fp = fopen("log.txt", "w"); //以文本写模式打开文件
double num = 1/3.0;
fprintf(fp, "%.2f", num); //num将在文件中存储为 0.33 这四个字符
fclose(fp);
fp = fopen("log.txt", "r"); //以文本读模式打开文件
double value = 0;
fscanf(fp, "%f", value); //将字符 0.33 转化为 0.33d 赋值给value,造成精度丢失。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。