c++ - 在输入字母之前,我们如何才能进行数字输入?
问题描述
cout << "Enter the numbers to be stored (end with a letter): ";
cin >> number;
while(!(cin.fail())){
numbers.push_back(number);
cin >> number;
}
for(int i = 0; i < numbers.size(); i++){
node->insertKey(numbers.at(i));
}
int search;
cout << "Which number do you want to look up? ";
cin >> search;
我想从用户输入中获取数字,直到用户输入一个字母。
此后,我想接受另一个用户输入。我的输出工作正常。所以当我输入一个字母时,它会停止。但它不要求第二个输入。我怎样才能解决这个问题?
解决方案
最好先这样做:
while (cin >> number)
numbers.push_back(number);
如果他们在任何有效数字之前键入一个字符,则上面会留空vector
,而您的原始代码会将一个无意义的数字推到vector
.
然后,如果他们输入了一个字母,则cin
流将被置于错误状态并且仍然具有该字符输入,您将希望摆脱它:
// clear stream errors
cin.clear();
// actually get rid of the line with the character on it...
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
然后,您可以继续执行 for 循环并流式传输到search
.
推荐阅读
- python - python selenium发送用空格分隔的密钥
- flutter - 颤动 gif,仅在被命令时播放
- assembly - 影响 GCC 内联汇编中内存操作数寻址模式的早期破坏行为不正确的具体示例?
- swiftui - TitleBar 中的 SwiftUI NavigationLink 两次推送视图,一个 Button 做同样的事情不是
- reactjs - 我不断收到一个无效的钩子错误,反应引导程序,有什么想法吗?
- command-line - 使用 aria2c 下载并保存大 CSV 的压缩版本
- arrays - 为裸机 ARM 进行交叉编译时,C 数组未按预期初始化
- java - TestNG - 重试分析器不使用多个测试数据排列
- java - JavaFX Gradle Jlink-Plugin:jpackageImage 由于“找到两个版本的模块”而失败
- azure - 租户 guid 的租户:示例 nodejs-webhooks 应用程序