c++ - 给定值之前触发的函数
问题描述
这个问题的名字可能不好,因为我不知道这里发生了什么。但是我有一个调用这个函数str2int()
来检查用户输入值是否是一个数字。无论出于何种原因,它都会在给出任何输入之前触发。这是在我的main()
:
std::string stringSKILL;
for(int i = 0; i < 5; i++) {
switch(i) {
case 0:
cout <<"\n\nStrength (How strong you are)";
cout <<"\nHow many points (you have " << total_SKILL_points << " left): ";
std::getline(std::cin,stringSKILL);
Strength = str2int(stringSKILL);
if(str2int_i == 0) {
Strength = 0;
i--;
str2int_i++;
break;
// }'s later in program
这是功能:
// Check if user input is a number
int str2int(std::string &str) {
std::stringstream ss(str);
int num;
ss >> num;
if(ss) { // error handling
return num;
}
else {
cout <<"\n\nPlease Enter a Number!";
str2int_i--;
}
}
但是当这个程序运行时,“请输入一个数字”已经被打印出来,没有任何输入。之后,一切正常。为什么是这样?
解决方案
尝试在 getline 之后清除缓冲区以防止缓冲区中的任何值用作输入(可能是换行符)
std::getline(std::cin,stringSKILL);
std::cin.ingore()
应该解决。否则,您应该发布其余代码!
推荐阅读
- wpf - 如何避免停靠面板中的内容重叠
- javascript - React Native - 不变违规 - i18next 集成
- c# - 如何在打开的文档中显示/激活文本光标?[C#,EnvDTE]
- codeigniter - 在集合关系 nn 中使用 where 子句时的未知列
- session - 如何在 asp.net core 2.2.0 版本中创建对象值的会话?
- java - 流式传输文件到 azure Web 应用程序在 2 Go 处停止:SocketTimeoutException
- jms - 如何设置 ActiveMQ Artemis 重新传递策略不阻塞队列
- react-native - 不变违规:缺少导航道具
- javascript - 是否可以使用旋转的标题单元格制作粘性表格标题?
- selenium-webdriver - 连接被拒绝时测试失败:连接