c语言的,怎么判断txt文件换行?

#include<stdio.h>
#include<string.h>
int main()
{
int n=0;
char *loc;
char a[230];
FILE*fp;
fp=fopen("1.txt","r");
fgets(a,49,fp);
a[50]='\0';
loc=a;
while(*loc)
{
if(*loc=='\r'&&*loc+1=='\n')
n++;

loc++;
}
printf("%d",n);
return 0;
}

还是为0?求解释
应该是3嘛。为啥n=1;

因为 if(*loc=='\r'&&*loc+1=='\n')写错了!当*loc=='\r'时,*loc+1就等于'\r'+1=13+1=14,所以不会为'\n'('\n'=10)。故*loc=='\r'&&*loc+1=='\n'永远为“假”,这样就不可能执行后面{}中的 n++和 loc++,所以n永远是0……如果你是要判断'\r'后紧跟的是'\n'的话,那要写成 if(*loc=='\r'&&*(loc+1)=='\n')才对,即是对地址loc加1而不能给loc所指的内容*loc加1。追问

改了,还是不行啊!我是想问fgets函数会读取txt里的换行符嘛?

追答

fgets()函数从文件中读取字符时可以读进来'\n',而且还在其后加一个'\0'作为字符串结束符,但它不会把'\n'读到行的中间,因为遇到'\n'时就认为一行结束了……

追问

txt的换行符到底代表啥啊。

是不是有三个?还是一个都没有

追答

可能一个没有!由于视框太小放不下一行而“自动生成”的换行不是'\n','\n'是实实在在的一个字符,ASCII码是十进制10!

追问

这个按理说有三个啊?怎么检测就一个

追答

这里至少3个'\n'。代码逻辑有点问题吧?fgets(a,49,fp)从fp中读字符时遇到'\n'就认为结束了,就不再往后读了,当然只有1个'\n'了,而且会在最后自动放1个'\0',所以a[50]='\0'也是多余的。要想有多个'\n'被读进来,就得重复几次fgets()。写上3个fgets(a,49,fp),并把a[50]='\0'删除试试。如果检测到1个以上的'\n'了,就说明逻辑对了,再修改你的代码!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-30
有\r吗?直接就是\n就行了追问

改了,还是不行啊!我是想问fgets函数会读取txt里的换行符嘛?

相似回答