关于循环,它有一些错误

时间:2016-10-26 15:49:24

标签: c++

我试着确定一个数字是否是一个整数。

  1. 当我运行它时,我输入一个数字,例如5.5,它显示" 5.5不是int。请再试一次:"。然后我输入字母,例如' a',它显示" 5.5不是int。请再试一次:"。这封信' a'是一个字符,而不是整数,我认为它应该转到第二种情况,并且必须显示"没有信请",但它不是。

  2. 当我第一次输入一个字母,例如' D'时,程序会运行"请不要写字母"无限次。我想要它显示"请不要写信"但只有一次,那么我可以在这个循环中输入另一个数字。

  3. 如何修复这些错误?

    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";
    

    }

2 个答案:

答案 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