c语言中' \n',与' \0'的区别?

今天没事写了段代码。
#include
main()
{
int c;
while(c=getchar())!='\n'
putchar(c);
}
这里只能输入输出一次,就退出循环了。
而我这样写
将while(c=getchar())!='\n'改为while(c=getchar())!='\0'
这样就可以多次循环输入输出了而我又将上面的改为while(c=getchar())!=EOF
则不能输出了。
请问这几个是为什么?
谢谢!

10个回答

首位是\n,每次结束输入都会按Enter,因此循环也就执行一次;而\0是字符串的结束符,而又无法从键盘输入,因此可以无限输入输出;
EOF,没有实验过用它作输入结束标志,EOF是ctrl+z,输入字符之后按Ctrl+z,会产生这个值。
其次,你的循环应该写错了,while((c=getchar())!='\n'),再实验一次试试

suoniyusanxing
索尼与三星 哦,我只是想知道为什么,专门写成那样的。现在明白了,谢谢了!
5 年多之前 回复
havedream_one
havedream_one 回复visuallite:linux下的没实验过,好久不写C程序了
5 年多之前 回复
visuallite
visuallite 恩 是这样,但是在Linux平台下好像是Ctrl+D
5 年多之前 回复

\0 是字符串结束符,即零,从键上是无法输入的
EOF,是 End Of File 的缩写,其值好像是 -1,你也是无法从键上输入的。你所谓的不能输入,是什么情况,不太清楚。

这个我知道,我想问为什么会出现上述情况。谢谢!

'\0'永远不会执行到,因为你不会输入这个字符的,\n是回车

感觉你是对那些概念不清楚,建议你去看看书

\0 是字符串结束符,无法从键盘上进行输入,而\n是回车

默认我们从键盘输入的数据流是字符流(控制信号是特殊的字符数据),而字符数据有其规范ASCII。我们用一些特殊的字符作为数据流的分割,比如这里的‘\n’(ASCII0x10),‘\0’(0x00)。
‘\n’(0x10)代表回车可以由键盘上回车键输入;
‘\0’(0x00)是空字符无法由键盘输入,我们从键盘数字区输入“0”字符对应ASCII是0x30,从键盘输入“空格”键对应的ASCII是0x20;
‘EOF’ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志,通过组合键“Ctrl+z”可以产生‘-1’这个值。~

你的while循环写错了吧,应该是这样while(c=getchar()!='\n')

#include
int main(void)
{
int c;
while(c=getchar() != EOF)
putchar(c);
return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐