c++ - 错误检查不是 int 的东西时,控制台被淹没
问题描述
我试图只允许整数值进入我的程序,所以我做了以下函数。该功能与我在网上看到的其他功能相似,我的似乎工作得很好,直到我添加一个!在它前面检查某些东西是否不是 int。
检查输入是否为整数的函数:
bool isInteger(std::string s)
{
for (int i = 0; i < s.length(); i++)
{
if (isdigit(s[i]) == false)
{
return false;
}
return true;
}
}
正在使用的功能:
int getLevel()
{
int level;
std::cout << "Level One\n";
std::cout << "Level Two\n";
std::cout << "Level Three\n";
std::cout << "Level Four\n";
std::cout << "Level Five\n";
std::cout << "Enter your level (1-5): ";
std::cin >> level;
while (!isInteger(std::to_string(level)) || level < 1 || level > 5)
{
std::cout << "Enter an integer value between 1-5 inclusive: ";
std::cin >> level;
}
clrscr();
return level;;
}
我相信该功能可以正常工作,直到我放 ! 在它面前。我试图只允许整数输入到我的程序中,当我输入双精度或字符串时,控制台会充斥着消息“输入介于 1-5 之间的整数值:”并且没有时间输入输入。我对 c++ 编程相当陌生,可以使用一些建议。谢谢!
解决方案
感谢所有的回复和澄清,我已经设法提出了自己的解决方案。
新的 isInteger 函数现在检查所需的所有内容,包括用户上面建议的输入,如“0004”:
bool errorCheck(std::string s)
{
int intLevel;
std::stringstream tempLvl(s);
tempLvl >> intLevel;
for (int i = 0; i < s.length(); i++)
{
if (isdigit(s[i]) == false || s[0] == '0' || intLevel < 1 || intLevel > 5)
{
return false;
}
}
return true;
}
实际操作方法:
std::cout << "Enter your level (1-5): ";
std::cin >> stringLevel;
while (!errorCheck(stringLevel))
{
std::cout << "Enter an integer value between 1-5 inclusive: ";
std::cin >> stringLevel;
}
std::stringstream lvl(stringLevel);
lvl >> level;
clrscr();
return level;
}
如果您发现代码有任何问题或有任何更简单的解决方案,请告诉我。感谢所有的帮助!
推荐阅读
- clojure - 如何在 Clojure 中真正打乱序列?
- android - 尝试为 Android 构建 Ionic 4 应用程序,但即使我已经设置了 gradle、路径和变量,也找不到它们
- android - 无法使用从脚本作为 AOSP 5.1 中的服务运行的 logcat 登录文件
- .htaccess - HTAccess RewriteRule 停止直接调用文件夹后?
- php - 如何用条形替换桌面菜单下拉菜单的单词
- android - 如何连接到 API 级别 29 上的特定 Wifi 连接?
- python - 如何重复请求任务
- reactjs - useMemo 对键控组件有影响吗?
- google-apps-script - 使用 MailApp.sendEmail 发送电子邮件两次
- javascript - 尝试在节点中使用 reCAPTCHA 时出现错误:“无法读取未定义的属性 'g-recaptcha-response'”