putchar(getchaer())的疑惑

来源:百度知道 编辑:UC知道 时间:2024/06/24 11:45:25
K&R第一章有个例子,把输入的字符原样输出:
#include <stdio.h>
main()
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
}

我觉得这个程序不用参数也可以,于是改编了一下,以期达到同样的效果:
#include <stdio.h>
void main()
{
while(getchar() != EOF)
putchar(getchar());
}

结果让我很郁闷。。。。
比如 输入“abc↙”后输出却只有一个“b”。
请教各位高手,第二个程序哪里不对了,为什么就达不到第一个程序的效果呢?
谢谢一楼和二楼,我知道错哪了。
程序改成
#include <stdio.h>
void main()
{
while (putchar(getchar()) != EOF)
;
}

输出是行了,奇怪的是EOF(ctrl+z)了却没退出程序。

额。。3楼:ctrl+c太猛了,直接把窗口给关了。。。。
我的意思是,按照程序,当putchar(getchar())这个表达式=EOF 的时候程序就该停止了呀,也就是屏幕上出现“Press any key to continue”才对呀。

当然不对了,getchar每运行一次,都要求输入一个字符啊,你输入的a被while那句的getchar给读去了,putchar里的getchar读到的当然是b了.
第一个程序用变量c来保存了每次读取的字符,当然可以abc全显了

void main()
{
while(getchar() != EOF) //这个需要输入一个字符
putchar(getchar()); //这里又要求输入另一个字符,显然,你输入的第一个字符就牺牲了
}

main()
{
int c;
while ((c = getchar()) != EOF) //这个需要输入一个字符
putchar(c); //输出才输入的字符
}

试试ctrl+c

返回前加system("pause");