C++的getchar()用法

分类: C/C++ |
1
#include
<string>
加上这两句执行,输入xinyong回车,出现的结果是 没有直接出现“press any key to
continue”,如图2所示。随便输入字符或字符串,按下回车,出现了“press any key to
continue”。
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
http://s3/bmiddle/ba08e8e007c4b6fd876f2&690
图2
回车键(或空格键或Tab键)也会存在缓冲区中,cout把缓冲区中的字符串显示在控制台上,这些字符串就不复存在于缓冲区中,但是那个回车键还在缓冲区中。 解决这个问题,首先还得认识下cin和getchar的用法,cin大家都很熟悉,输入字符串,按回车键完成输入,其实cin是把用户输入的字符串保存到一个缓冲区中,回车键(或空格键或Tab键)结束输入,其中
当程序调用getchar时.程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中),当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCⅡ码,如出错返回-1,如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
getchar()取的就是这个回车符,这时候缓冲区中的字符就被读完了,程序执行到第17行getchar()等待用户输入字符,就是图2的情况,当输入回车键时,程序运行结束。 还记得前一段说过的cin输入的缓冲区还残存一个回车符吗,程序段的16行
getchar(),程序运行一次就消失了,不便于程序员查看程序执行的结果,于是加一个getchar()函数等待按键输入,当然了,真正目的并不是要输入什么字符,只是让控制台停留,直到输入回车键消失,我们使用的控制台,如果没有这两句执行结果就像图1显示的那样,并不影响观察,顶多说是怕误碰到键盘上除了回车键以外的其他按钮结束了控制台。当然了,把这两句getchar()去掉不影响程序执行结果。 在有些控制台上,如果没有加
总结一下,结尾的两句就是为了便于控制台输出结果观察。