限制用户输入

时间:2014-06-10 20:38:36

标签: c++ switch-statement

我编写了以下代码,并且在很大程度上它完成了我想要它做的事情。问题在于,当用户可以输入类似" 111"输出为"您输入了数字1。"我想将用户的输入限制为1个字符。有什么建议?我确信解决方案非常简单,但我无法弄清楚。此外,代码必须保持switch语句的形式。谢谢!

#include <iostream>
using namespace std;

int main()
{
    char i;

    cout << "Please enter a number between 1 and 9." << endl;
    cout << "Enter a number: ";
    cin >> i;

    switch (i)
        {
        case '1':
            cout << "You entered the number one." << endl;
            break;

        case '2':
            cout << "You entered the number two." << endl;
            break;

        case '3':
            cout << "You entered the number three." << endl;
            break;

        case '4':
            cout << "You entered the number four." << endl;
            break;

        case '5':
            cout << "You entered the number five." << endl;
            break;

        case '6':
            cout << "You entered the number six." << endl;
            break;

        case '7':
            cout << "You entered the number seven." << endl;
            break;

        case '8':
            cout << "You entered the number eight." << endl;
            break;

        case '9':
            cout << "You entered the number nine." << endl;
            break;

        default:
            cout << "You did not enter a valid number." << endl;
            break;
        }

    system("pause");
    return 0;
}

3 个答案:

答案 0 :(得分:1)

您可以使用c标准io库中的getchar(char)。

    #include <stdio.h>
    ...
    char i;
    int j;

    cout << "Please enter a number between 1 and 9." << endl;
    cout << "Enter a number: ";
    getchar(j);
    i=(char)j;
    switch(i){
    ...

答案 1 :(得分:0)

有一种方法很容易:只需将char c切换为int n,然后将case '1'替换为case 1等。尝试此操作直到用户输入有效编号,然后输入“a”(即不是数字的东西)。通常,简单的方法也是错误的方式。 ;)

现在,您可以做的是使用这段代码:

std::string line;
while (getline(std::cin, line))
{
    if (line == "1") {
        std::cout << "You entered the number one." << std::endl;
    } else if (line == "2") {
        // ....
    } else {
        std::cout << "You didn't enter a valid number" << std::endl;
    }         
}

这里的区别在于,由于输入是行基,没有进一步解释,因此当输入不能解释为数字时,不会修改streamstate。在与用户交互时,这通常更加健壮。如果以后想要以数字编号,请查看stringstreams或lexical_cast进行转换。

答案 2 :(得分:0)

你可以使用getch()从屏幕上获取一个字符,你可以检查它是否是一个数字,然后再次询问有效的输入。