c语言中getchar()的应用和输入途径

来源:百度知道 编辑:UC知道 时间:2024/05/29 15:06:00
我初学C语言,在windows下用win-tc作编译器.win-tc提示在win98以上版本应在程序最后加getch();,否则运行完程序后将自动关闭,无法看到运行结果(我用的是winXP).开始运行"hello,world"程序(在窗口DOS下运行)一切正常,完成后按任意键关闭.
然后运行这套程序:
#include<stdio.h>
main()
{
int c;
c=getchar();
while(c!=EOF){
putchar(c);
c=getchar();
}
return0;
getch();
}
时,打开DOS,发现输入键盘什么,屏幕打印什么.这是不是说明getchar();是指键盘输入?那EOF有声作用呢(键盘输入不会有文件结束的)?
我把while后改成(c!=EOF&&c!=0)时,在DOS下依然可以输入0,怎么解释?
不好意思,打错了,是c!='0'
另外,在这个程序中我去掉getch(),dos没有自动关闭。这是不是说C搜索到getchar()函数,让我先输入,然后按什么键开始运行程序?

getchar();的确是键盘输入,EOF在这里并不是用来判断文件是否结束,而仅仅是代表数值-1,这在头文件中是定义过的,你可以去看一下,while(c!=EOF)中的条件其实是判断当字符变量C的ASCII码值不等于-1时执行下面的语句,这个条件是永远为真的,因为任何字符的ASCII码值是不可能为负数的,如果把条件改为(c!=EOF&&c!=0)是判断当字符变量C的ASCII码值不等于-1而且不等于0,对输入的字符而言这个条件也是永远为真的,因此仍然可以随意输入字符,你的理解其实是有误的,因为比较的的是ASCII码的值,而你输入的0的ASCII码值并非0而是48,那么48当然不等于0啦,所以条件为真,可以正常执行下面的语句

getchar函数是一个输入函数.putchar是输出函数。putchar(c);
c=getchar();按照你的这段代码当然是输入什么就打印什么,当语句运行到c=getchar();语句时,就会等待用户输入后才会继续执行,而如果输入不出错的话,putchar(c);就执行,把上次输入的字符打印出来。一般情况下输入任何东西都不会认为是出错的,因为getchar只取首字符,例如输入3dfj3224ds,则只取字符3,注意它和数字3的区别,getchar在读内容时是把数字都当字符看待,字符"3"的ASCLL码是51,也是它在机内的二进制存储形式的大小,这可与数字3相差甚远了。

所以这也是你把while后改成(c!=EOF&&c!=0)时,在DOS下依然可以输入0的原因,因为c!=0中的0是数字0,而你若输入0的话,因为getchar是以字符0来看待的,当c!=0做比较时是以字符的ASCLL码做比较的,又0的ASCLL码为48,于是48!=0成立,那就当然可以输出0了,若想输入0后不输出,则改为c!='0'就可以了.

现在回到前面的EOF问题,我说了一般是不会输入是不会认为出错的,但可以试试ctrl+d和ctrl+z,
但EOF在不同的操作系统中输入这个EOF有不同的按键,也可以调用系统函数改变重新设定,所以在这里它只是给你一种结束循环的方法。有声作用只是你用上面的方法输入EOF作用后的提示音,这样循环就结束了。

EOF