Windows系统下文件中换行&回车(回车键)占几个字节,是几个字符? 50
从一个只敲了两个回车键的txt文件的属性来看(图1),一个回车应该是2字节;但是用c语言程序fputc函数读取,却只读取了2次就读完了文件(图2),这是怎么回事?(feo...
从一个只敲了两个回车键的txt文件的属性来看(图1),一个回车应该是2字节;但是用c语言程序fputc函数读取,却只读取了2次就读完了文件(图2),这是怎么回事?(feof函数会在文件结束多读一次,所以循环是3次)
呃……不是fputc……是fgetc 展开
呃……不是fputc……是fgetc 展开
2个回答
展开全部
//在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;
}
展开全部
更多追问追答
追答
fprintf记不清了,反正io库为了可移植对\n做了转换
追问
本来想采纳下一条回答的,不懂为什么系统自动推荐了这个……我要是百度到了我要的还会来这儿问?***
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询