我试着确定一个数字是否是一个整数。
当我运行它时,我输入一个数字,例如5.5,它显示" 5.5不是int。请再试一次:"。然后我输入字母,例如' a',它显示" 5.5不是int。请再试一次:"。这封信' a'是一个字符,而不是整数,我认为它应该转到第二种情况,并且必须显示"没有信请",但它不是。
当我第一次输入一个字母,例如' D'时,程序会运行"请不要写字母"无限次。我想要它显示"请不要写信"但只有一次,那么我可以在这个循环中输入另一个数字。
如何修复这些错误?
while (true) {
while ((num) != static_cast<int>(num)) {
cout << "\t" << num << " is not int. Please try again: ";
cin >> num;
cin.clear();
cin.ignore(80, '\n');
}
while (!(cin >> num)) {
cout << "\tNo letter please: ";
cin >> num;
cin.clear();
cin.ignore(80, '\n');
}
cout << "Good! " << num << " is an int!\n\n";
}
答案 0 :(得分:0)
你可以这样做。输入用户的字符串。计算该字符串中的字符数。如果它等于字符串长度,则它是有效的正整数。对于负整数,只需检查数字的位数是否小于字符串的大小,字符串是从0开始。
#include <iostream>
using namespace std;
int main()
{
string s;
while(true)
{
cin>>s;
int i,no_of_digits=0;
for(int i=0;i<s.length();i++)
{
if(isdigit(s[i]))
no_of_digits++;
}
if(no_of_digits == s.length() || (no_of_digits == s.length()-1 && s[0]=='-'))
{
cout<<"Good "<<s<<" is an Integer.";
break;
}
cout<<s<<" is not a valid Integer!\nPlease Enter again\n";
}
return 0;
}
答案 1 :(得分:0)
在cpp中解析字符串的最佳方法。可以使用stringstream或使用sto* series functions of cpp11。
已经有一些好的答案here。