C语言文件的3个问题

vcgaoshou 2017-04-15 10:18:34
1.为什么在C语言中,读入文本文件时,遇到回车换行,系统要将回车换行替换为换行一个符号?
2.我们平时按enter键,键盘送给系统的是几个符号?是回车?还是回车换行?
3.以下程序是读如2进制文件中的10个数据,为什么最后一个数显示2次?例如下例中的10,就显示了2次。但我看了文件长度,确实只有40个字节。这是什么原因造成的,用什么办法可以解决。
int main(){
FILE *f1,*f2;
int i;
f1=fopen("F:\\date.dat","wb");
for(i=1;i<=10;i++)
fwrite((int*)&i,sizeof(int),1,f1);
fclose(f1);
f2=fopen("F:\\date.dat","rb");
while(!feof(f2))
{
fread((int*)&i,sizeof(int),1,f2);
printf("%d ",i);
}
fclose(f2);
return 0;
}

...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-04-16
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察! 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 读写文件的函数对应的C源代码都有,自己看或单步调试一下,在crt\src\*.c
赵4老师 2017-04-16
  • 打赏
  • 举报
回复
电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
paschen 2017-04-16
  • 打赏
  • 举报
回复
因为最后一次EOF时并没有读取,但你代码又会把之前的 i再输出一次 这样改可以:
int main() {
	FILE *f1, *f2;
	int i;
	f1 = fopen("F:\\date.dat", "wb");
	for (i = 1; i <= 10; i++)
		fwrite((int*)&i, sizeof(int), 1, f1);
	fclose(f1);
	f2 = fopen("F:\\date.dat", "rb");
	while (1)
	{
		fread((int*)&i, sizeof(int), 1, f2);
		if (feof(f2))
			break;
		printf("%d ", i);
	}
	fclose(f2);
	return 0;
}
paschen 2017-04-16
  • 打赏
  • 举报
回复
看操作系统吧,WINDOWS下,文本文件换行符会被替换为\r\n 控制台中按Enter得到的是\n

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧