C语言fgets函数读取换行符吗?

我的部分代码是这样,
#define MAXLINE 90
char line[100];//保存一行
while(fgets(line,MAXLINE,data)!=NULL)//对每行进行处理
一般长度不够MAXLINE的。
我看了文件的第一行是“职业装/n 配饰/n ”,没有双引号,/n后面是两个空格
而紧跟着fputs(line,stdout);printf("%d",len);
不仅fputs打印之后没有换行直接输出了16,而且16也不对啊,后面两个空格,至少是17啊,再加上换行符应该是18吧,而且fputs输出后应该换行啊。感觉fputs不仅没有保存换行符,而且后面两个空格好像只读了一个。
谁在自己机器上跑一遍,说一下是不是和我这一样啊。。

fgets函数从文件读取'\n'并存储,在'\n'后再增加一个'\0'构成字符串。但fgets函数需要指定读入的字符数,如果指定了n,则最多只能读取n-1个。fgets在读取了n-1个字符、读到了'\n'或遇到了EOF三种情况之一时都结束读取。追问

额,我在问这个问题前,肯定自己已经看了fgets函数怎样工作的,我就是疑惑为什么我这里的程序和fgets函数描述的好像不一样,它没有保存\n以及最后两个空格只读了一个空格。。

追答

看看这里,哪有你说的情况,一切与fgets相符。(文件的9后有两个空格,然后是回车)

追问

那为什么我的不是那样啊。。。
你在文件里用汉字试试。。就用我给的示例吧。。直接复制那个引号,再换行第二行随便写个内容。

非常感谢你的运行啊

追答

“职业装/n 配饰/n ”——就这?你把回车符搞错了吧?你先改成“职业装\n 配饰\n ”试试!另外文件中不能存储\n,\n是两个字符,回车只能在写文件时写一个回车符。文件中应该是
职业装
配饰
这个样子。另外,因为“职业装”后面有回车符,所以你用fgets一次读不到两行,只能一行一行地读。

追问

。。。不是啊。/n是词性标注。那个文件是进行中文分词后的文件,第一行是那两个单词和词性标注,后面两个空格,然后是换行。。。

追答

好好的……

好好的……


后一个/n后有两个空格,然后有一个回车。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-17
fgets会读取回车符
你的len不知道是怎么赋值的追问

噢,int len=strlen(line);
但是感觉fgets没有读取换行符啊

相似回答