Windows系统下文件中换行&回车(回车键)占几个字节,是几个字符? 50

从一个只敲了两个回车键的txt文件的属性来看(图1),一个回车应该是2字节;但是用c语言程序fputc函数读取,却只读取了2次就读完了文件(图2),这是怎么回事?(feo... 从一个只敲了两个回车键的txt文件的属性来看(图1),一个回车应该是2字节;但是用c语言程序fputc函数读取,却只读取了2次就读完了文件(图2),这是怎么回事?(feof函数会在文件结束多读一次,所以循环是3次)
呃……不是fputc……是fgetc
展开
 我来答
imkarayi9d4f
2017-12-12 · TA获得超过1552个赞
知道小有建树答主
回答量:1164
采纳率:85%
帮助的人:596万
展开全部
//在WINDOWS的文本中,回车就是0D0A,
//fgetc()遇到0D会直接忽略,返回0A,
//也就是说,在fgetc()获取回车时,返回的是0A。
//所以程序输出 10 10 -1 是正确的。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE * fp;
char ch;
int i;
i=0;
fp = fopen("c:\\1234.txt","r");
    if( fp == NULL ) return 0;
while(feof(fp)==0)
{
ch=fgetc(fp);
printf("%d ",ch);
i++;
}
printf("\n%d\n ",i);
fclose(fp);
fp=NULL;
return 0;
}
更多追问追答
追问
为什么会这样?是和fgetc这个函数本身有关吗?如果用fread读一个字节会把0D0A分开吗?(现在电脑不在身边不好试试…)
追答
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE * fp;
char ch;
int i=0;
fp = fopen("c:\\1234.txt","rb+"); //使用二进制读取就可以解决问题了。 
        if( fp == NULL ) return 0;
while(feof(fp)==0)
{
ch=fgetc(fp);
printf("%d ",ch);
i++;
}
printf("\n%d\n ",i);
fclose(fp);
fp=NULL;
return 0;
}
zxfzhb1234
2017-12-12 · TA获得超过696个赞
知道小有建树答主
回答量:707
采纳率:74%
帮助的人:152万
展开全部
C语言中的'\n'在不同系统中不一样(当然,如果是fprintf这种另说)

windows:\r\n
linux及mac os:\n
早期mac系统:\r

具体请自行百度 C语言对换行符的处理
更多追问追答
追答
fprintf记不清了,反正io库为了可移植对\n做了转换
追问
本来想采纳下一条回答的,不懂为什么系统自动推荐了这个……我要是百度到了我要的还会来这儿问?***
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式