提问人:Eddie Rukmanis 提问时间:11/3/2018 最后编辑:JeJoEddie Rukmanis 更新时间:11/3/2018 访问量:3514
如何只允许用户输入正整数?
How to allow only positive integer input from user?
问:
我一直在尝试只允许正整数输入到我的程序中。但是它的工作是字符输入和负整数,十进制数。有什么想法可以解决这个问题吗?
#include <iostream>
using namespace std;
int main()
{
int row, col, i, i1, j, test;
double n;
test = 0;
while (test == 0)
{
cout << "Enter the number of rows: " << endl;
cin >> row;
if (cin.fail() || row <= 0 || !(row == (int)row))
{
cout << "\nEntered value is wrong!";
printf("\n");
cin.clear();
cin.ignore();
test = 0;
}
else { test = 1; }
}
}
答:
1赞
JeJo
11/3/2018
#1
我一直在尝试只允许正整数输入到我的 程序。
如果您将用户输入作为字符串而不是整数,则可以在 std::isdigit 的帮助下轻松检查它。
- 将用户输入作为字符串。
- 对于字符串中的每个字符,检查它是否为数字(使用 )。
std::isdigit
- 如果用户输入(字符串)中的任何字符不是有效数字,则返回 Boolean = false。
- 如果所有字符都为 true,则输入为整数,您可以使用 std::to_string 将其转换回整数。
示例代码如下:SEE LIVE
#include <iostream>
#include <cctype> // std::isdigit
#include <string>
#include <vector>
bool isInteger(const std::string& input)
{
for (const char eachChar : input)
if (!std::isdigit(eachChar))
return false; // if not a digit, return False
return true;
}
int main()
{
std::vector<std::string> inputs{ "123", "-54", "8.5", "45w" }; // some inputs as strings
for(const std::string& input: inputs)
{
if (isInteger(input))
{
// apply std::stoi(input) to convert string input to integer
std::cout << "Input is a valid integer: " << input << std::endl;
}
else { std::cout << input << " is not a valid integer!\n"; }
}
}
输出:
Input is a valid integer: 123
-54 is not a valid integer!
8.5 is not a valid integer!
45w is not a valid integer!
0赞
zdf
11/3/2018
#2
这是您可能想要的(演示):
#include <iostream>
#include <limits>
int main()
{
using namespace std;
int n;
while ( !( cin >> n ) || n < 0 )
{
cin.clear();
cin.ignore( numeric_limits<std::streamsize>::max(), '\n' );
}
//...
return 0;
}
评论
>>
在第一个无效字符处停止。您需要检查该字符以了解它是否是输入的正确结尾。!(row==(int)row)
是完全无用和多余的。cout << "\nEntered value is wrong!\n";
cout << "\nEntered value is wrong!";
printf("\n");
endl
\n
else{ parbaude =1; }