cin.get()解密

Posted -zyq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cin.get()解密相关的知识,希望对你有一定的参考价值。

最近在使用cin.get()函数时遇到了一个迷惑行为,现已解开。

一、cin.get()的用法

char ch;
ch = cin.get(); //第1种用法
cin.get(ch);    //第2种用法

二、迷惑行为解密

当你前面调用过cin获取输入时,调用cin.get()函数不会等你等你在屏幕上手动再输入一个字符,而是直接读取 你上一次调用cin进行输入时的 最后一个回车字符

下面来看一下两份不同的代码和运行结果,两份代码的区别仅仅在第13行。

 1 void test() {
 2     char ch;
 3     int todo = 1;
 4 
 5     cout << "请输入字符:";
 6     cin.get(ch);           //前面未调用过cin,会在屏幕等待你输入
 7     cout << "输入字符为:" << ch << endl << endl;
 8 
 9     cout << "输入1继续,输入0结束:";
10     cin >> todo;
11     while (todo) {
12         cout << "请输入字符:";
13         //cin.get();       
14         cin.get(ch);       //前面调用过cin,此时不会等待你在屏幕上输入,而是直接读取上一次调用cin最后输入的回车给ch
15         cout << "输入字符为:" << ch << endl << endl;
16 
17         cout << "输入1继续,输入0结束:";
18         cin >> todo;
19     }
20 }
正常情况下相邻两次循环输出结果的间隔仅为一个空行,但是从第2次循环开始间隔为两个空行,这是因为第14行代码读取了换行符并在下一行输出。
技术图片

 

 1 void test() {
 2     char ch;
 3     int todo = 1;
 4 
 5     cout << "请输入字符:";
 6     cin.get(ch);           //前面未调用过cin,会在屏幕等待你输入
 7     cout << "输入字符为:" << ch << endl << endl;
 8 
 9     cout << "输入1继续,输入0结束:";
10     cin >> todo;
11     while (todo) {
12         cout << "请输入字符:";
13         cin.get();         //前面调用过cin,先用cin.get()吃掉上一次调用cin最后输入的回车
14         cin.get(ch);       //此时可以正常输入字符给ch
15         cout << "输入字符为:" << ch << endl << endl;
16 
17         cout << "输入1继续,输入0结束:";
18         cin >> todo;
19     }
20 }
相邻两次循环输出结果的间隔仅为一个空行。
技术图片

 

以上是关于cin.get()解密的主要内容,如果未能解决你的问题,请参考以下文章

没有参数的 cin.get() 做啥?

getline(cin, string_name) 之前需要 cin.get()

C标准输入流

可以解密加密数据的片段吗?

进行简单功能性查询的简单代码

cin,cin.get(),cin.getline(),getline()