中易网

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

答案:5  悬赏:30  
解决时间 2021-04-08 14:03
我初学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啦,所以条件为真,可以正常执行下面的语句
全部回答
c=getchar(); //输入一个字符给c,屏幕显示的是你输入的字符 while(c!=EOF){ putchar(c); //在dos屏幕上输出显示字符c的值 c=getchar(); //再输入一个值给c 可能是最后c=getchar();的这一步不论while条件是否满足都得执行,lz是不是以为这一步也被包含在循环语句中了? 或把while后改成(c!=EOF&&c!=‘0’)

char *gets( char *buffer );

功能:从stdin流中读取字符串,直至接受到换行符或eof时停止,并将读取的结果存放在str指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。

 getchar   从stdio流中读字符

选c

------------------c++部落------------hello word!-------- 无论你是初学者还是专家,只要你热爱编程、交流、分享,欢迎加入

EOF在Windows下是ctrl+z。 c!=0不是数字0。你的输入都是Assic字符,所以0对应的是48。按照你的要求,你的判断应该这样写: c!=EOF&&c!=48
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作用后的提示音,这样循环就结束了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
合川是哪省的地名
下雪的时候学生放假了,今天星期六学生上课吗
怎样修改阿里旺旺每日焦点的天气城市?点那修
丰仪店村在什么地方啊,我要过去处理事情
怎样制作蜂密柚子茶
玩英雄联盟,用歪歪,自由麦 为什么别人都能
浙江永强做短线明天可以买入吗,为什么 股票
云南南部平均海拔
最近天下足球十佳球的背景音乐
修眉刀哪个做的刀即锋利又耐用呢
统一劲典四冲程摩托车机油多少钱一桶
把“人们拎起斧头把树木一棵一棵砍下来”改为
保利布是什么?
NINO桑怎么样
纯天然中草药茶麸洗发馆我想知道这个在什么地
推荐资讯
API原油库存和现货黄金价格有什么关系
中国第一高铁塔在哪里?
费玉清的一剪梅算不算爱国歌曲?
斯柯达1.4t自动极地版库存车能买吗?
室内设计速成宝典光盘
满族与清朝有什么关系?
哪些男歌手唱的流行歌曲适合女生唱呢?
"人手"什么意思
为什么我的平板软件装不进sd卡?
大连民族大学开发区校区是大几的学生
我在皮皮游戏上下载了游戏,如果卸载了皮皮游
网上报名全国大学生数学竞赛可以吗?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?