加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C++的getchar()用法

(2013-04-22 19:54:21)
分类: C/C++
   下午看C++程序的时候,碰到一个有意思的问题,下面且听我说来。程序代码很简单,输入一个字符串然后显示字符串,程序是这样的

1 #include <string>

 2 #include <iostream>

 3 

 4 using namespace std;

 5 

 6 int main(int argc, char* argv[])

 7 {

 8     string in_string;

 9     cout<<"please enter your name: \n";

10     cin>>in_string;

11     if ( in_string.empty() )

12         // 产生一个错误消息输出到用户终端

13         cerr << "error: input string is empty!\n";

14     else

15         cout << "hello, " << in_string << "!\n";

16     getchar();

17     getchar();

18 

19     return 0;

20 }

   大家注意到程序16,17行的“getchar();”没有,这两句放在程序的末尾,有什么用呢?于是我把这两句去掉,执行程序,结果如图1所示。

                    http://s15/mw690/ba08e8e04daf22b305e5e&690

     图1


   加上这两句执行,输入xinyong回车,出现的结果是没有直接出现“press any key to continue”,如图2所示。随便输入字符或字符串,按下回车,出现了“press any key to continue”。

                   http://s3/bmiddle/ba08e8e007c4b6fd876f2&690   
                                  图2

   解决这个问题,首先还得认识下cin和getchar的用法,cin大家都很熟悉,输入字符串,按回车键完成输入,其实cin是把用户输入的字符串保存到一个缓冲区中,回车键(或空格键或Tab键)结束输入,其中回车键(或空格键或Tab键)也会存在缓冲区中,cout把缓冲区中的字符串显示在控制台上,这些字符串就不复存在于缓冲区中,但是那个回车键还在缓冲区中。

   当程序调用getchar时.程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中),当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCⅡ码,如出错返回-1,如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.

    还记得前一段说过的cin输入的缓冲区还残存一个回车符吗,程序段的16行getchar()取的就是这个回车符,这时候缓冲区中的字符就被读完了,程序执行到第17行getchar()等待用户输入字符,就是图2的情况,当输入回车键时,程序运行结束。

    在有些控制台上,如果没有加getchar(),程序运行一次就消失了,不便于程序员查看程序执行的结果,于是加一个getchar()函数等待按键输入,当然了,真正目的并不是要输入什么字符,只是让控制台停留,直到输入回车键消失,我们使用的控制台,如果没有这两句执行结果就像图1显示的那样,并不影响观察,顶多说是怕误碰到键盘上除了回车键以外的其他按钮结束了控制台。当然了,把这两句getchar()去掉不影响程序执行结果。

    总结一下,结尾的两句就是为了便于控制台输出结果观察。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有