我正在创建一个应用程序,要求用户输入生产订单(7位数字长),如下所示:
int order = 0;
cout << "Insert the order number: ";
cin >> ordem;
如何阻止用户输入信件?喜欢“I2345G789”?
这样做,我的应用程序只是进入一个无限循环。我在考虑使用这样的函数:
bool isLetter(int a)
{
string s = to_string(a);
for (int i = 0; i < s.size()-1; i++)
{
if (isdigit(s[i]))
{
return false;
}
else
return true;
}
}
然后:
if (isLetter(order))
{
cout << "Insert only numbers \n";
}
但它不起作用。为什么?我该如何改进代码?
PS:我对编程非常陌生,所以,对于任何初学者的错误都很抱歉。
答案 0 :(得分:3)
我猜你的代码周围有一个循环,以便在它包含非数字时再次询问订单号,例如:
while(...)
{
int order = 0;
cout << "Insert the order number: ";
cin >> order;
}
如果输入无法解析为整数的内容,则输入流将进入失败模式,这可能是您最终进入无限循环的原因。为了以简单的方式克服您的问题,您可以改为读取字符串:
string order;
while (true)
{
cout << "Insert the order number: ";
cin >> order;
if (isLetter(order))
cout << "Insert only numbers" << endl;
else
break;
}
函数isLetter()
现在采用字符串,如下所示:
bool isLetter(string s)
{
// Return true if the given string contains at least one letter.
for (size_t i = 0; i < s.size(); i++)
if (!isdigit(s[i]))
return true;
// Return false if there are only digits in the given string.
return false;
}
请注意,它应该是i < s.size()
而不是i < s.size()-1
。也许你应该将你的函数isLetter()
重命名为hasLetter()
,因为这样会更正确。