1

我有一个任务,我必须制作一个程序,该程序接受用户输入(需要自然数),然后打印出反向数字。该程序做得很好但是我还必须确保在输入不是自然数的值时程序不会给我任何错误。如果我输入双精度值或输入数字后跟字符,程序将退出。在其余情况下,该程序运行良好。什么可能导致这些问题?

int number;
char x = 'c';
while (x == 'c') {
    cout << "Enter a number\n";
    cin >> number;
    while (!(cin.good()) || number < 1 || floor(number) != number) {
        cin.clear();
        cin.ignore(256,'\n');
        cout << "Try again.\n";
        cin >> number;
    }
    string reverse;
    stringstream convert; 
    convert << number;
    reverse = convert.str();
    reverse = string (reverse.rbegin(),reverse.rend());
    cout << "The reverse number for number " << number << " is " << reverse << endl;
    cout << "If you want to continue using the program enter 'c',\nif you want to close the program enter anythin else\n";
    cin >> x;
    }
4

3 回答 3

1

这是因为假设123.456您的程序将123读取为int. 然后反转它然后期望char x == 'c'但得到 dot .

std::string从那之后读取std::cin,检查它是否是int.

std::string reverse;
std::cin >> reverse;

std::istringstream test(reverse);
int value; std::string rest;
if (!(test >> value) || (test >> rest)) // must read int but nothing more
{
  prompt for new value
} 
于 2012-10-13T22:18:22.937 回答
0

恕我直言:为了满足您的任务,您需要先将数字作为字符串读取,然后您可能需要检查该数字是否为自然数,即检查是否有“。” 在字符串中,如果没有,则执行您之前所做的操作,否则会给出错误消息。

于 2012-10-13T22:22:58.443 回答
0

我实际上double会将其作为输入类型,然后将其转换为自然数,因为自然数是实数的子集......至少这是解决用户输入双精度数或任何其他错误所产生的错误的最简单方法浮点型。

于 2012-10-13T22:16:54.970 回答