我是靠谱客的博主 儒雅银耳汤,最近开发中收集的这篇文章主要介绍C++程序存在多个cin输入时,后边的cin失效1 参考资料2 情况分类3 总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1 参考资料

1、https://www.cnblogs.com/pengjun-shanghai/p/4800871.html

2、《C++ Primer Plus(第6版)中文版》,第 4.2.5 小节,混合输入字符串和数字,P81;

3、代码测试 Git 仓库地址:https://github.com/FightingBoom/studycode

2 情况分类

2.1 一个单词

1、问题现象,参考如下代码示例

#include <iostream>
int main()
{
using namespace std;
cout << "What year was your house built?n";
int year;
cin >> year;
// 原始方法
cout << "What is its street address?n";
char address[80];
cin.getline(address, 80);
cout << "Year built: " << year << endl;
cout << "Address: " << address << endl;
cout << "Done!n";
return 0;
}

上述代码,运行结果如下,在输入年份之后,直接就结束了,没有给输入地址的机会

What year was your house built?
1966
What is its street address?
Year built: 1966
Address:
Done!

2、问题原因:cin 输入会把换行符留在输入缓冲区,因此第二次获取输入时,首先获取到的就是换行符,导致第二次还没输入,就直接结束了;

3、解决方法
(1)获取输入之后,再次 get 一次,把换行符读出来,保持输入缓冲区无其他内容;

cin >> year;
// 方法一
cin.get();
// 方法一

(2)获取输入之后,clear 清空缓冲区,然后 sync 同步缓冲区更改,这样也能保证缓冲区无其他内容;

cin >> year;
cin.clear();
cin.sync();

2.2 多个单词

1、针对多个单词输入的情况,就不能直接使用 cin 获取了,这样只会获得第一个单词;

2、此时可以使用 cin 库自带的接口 get 或者 getline ,以 getline 举例

#include <iostream>
using namespace std;
int main()
{
char cFirstName[20];
// first name,根据需要增大数组容量
char cLastName[20];
// last name,根据需要增大数组容量
char cGrade;
// grade
int iAge;
// age
cout << "What is your first name? ";
cin.getline(cFirstName, 20);
cin.clear();
cin.sync();
cout << "What is your last name? ";
cin.getline(cLastName, 20);
cin.clear();
cin.sync();
cout << "What letter grade do you deserve? ";
cin.get(cGrade);
cin.clear();
cin.sync();
cout << "What is your age? ";
cin >> iAge;
cin.clear();
cin.sync();
cout << "Name: " << cLastName << ", " << cFirstName << endl;
cout << "Grade: " << (char)(cGrade + 1) << endl;
cout << "Age: " << iAge << endl;
return 0;
}

如上代码,执行结果参考如下

What is your first name? Betty Sue
What is your last name? Yewe
What letter grade do you deserve? B
What is your age? 22
Name: Yewe, Betty Sue
Grade: C
Age: 22

3、针对多个单词输入,需要使用 getline ;

4、同样的,该测试代码有多次 cin 输入的情况,就可以使用之前的方法,先 clear ,在 sync 即可;


cin.getline(cFirstName, 20);
cin.clear();
cin.sync();

3 总结

1、cin 获取输入时,会把换行符留在输入缓冲区,因此第二次获取输入时,会直接读取到换行符,就结束了,导致读取的数据是空。

2、解决思路很简单,就是把输入缓冲区清空,而清空缓冲区又有两种方法。

最后

以上就是儒雅银耳汤为你收集整理的C++程序存在多个cin输入时,后边的cin失效1 参考资料2 情况分类3 总结的全部内容,希望文章能够帮你解决C++程序存在多个cin输入时,后边的cin失效1 参考资料2 情况分类3 总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部