【问题标题】:How to re prompt user if he enters a character within a number?如果用户在数字中输入字符,如何重新提示用户?
【发布时间】:2020-06-22 02:02:20
【问题描述】:

我正在尝试编写一个程序来询问用户要使用的操作,它会询问两个数字。但是如果用户输入了一个数字并且上面有一个字母,程序应该重新提示用户要求另一个输入。

 #include<iostream>
    using namespace std;
    void operation(int a);
    class Numbers{
        public:
            int num1, num2;
            float result;
    };
    int main(){
        Numbers input;
        int *ptr1 = &input.num1;
        int *ptr2 = &input.num2;
        float *ptr3 = &input.result;
        int range = 0;


        cout<<"Enter First Number: ";
        while(!(cin>>*(ptr1+range))){   
            cout<<"That's not a number!\n";
            cout<<"\nEnter First Number: ";
            cin.clear();
            cin.ignore(32767, '\n');
        }
        cout<<"Enter Second Number: ";
        while(!(cin>>*(ptr1+range))){   
            cout<<"That's not a number!\n";
            cout<<"\nEnter Second Number: ";
            cin.clear();
            cin.ignore(32767, '\n');
        }   
    }

所以在这个程序中,当用户输入一个字符时,它会提示用户输入另一个字符。 但是问题是当我在一个数字中输入一个字母时,程序没有重新提示而是 它跳到下一行。

输入第一个数字:t 这不是一个数字!

Enter First Number: 4e      // as you can see, this is what happens, it did not reprompt but it jumped to the next line of code             
Enter Second Number: That's not a number!

Enter Second Number:

【问题讨论】:

  • 你试过e4e44 34吗?
  • @Melon 是的,它工作正常,但是当数字出现时它不会。
  • 太棒了。现在正如其他人指出的那样,请使用std::stoi 请在此处查看它如何与示例一起使用,以便您更深入地了解发生了什么:en.cppreference.com/w/cpp/string/basic_string/stol

标签: c++


【解决方案1】:

您可以使用std::stoi完成转换检查。

string number_string
cin >> number_string;
size_t number_end;
int number;
try {
    num = stoi(line, &number_end);
} catch (...) {
    // invalid number
}
if (number_end < line.size() && !isspace(line[number_end])) {
    // invalid number
}

【讨论】:

    【解决方案2】:

    也许你可以使用isdigit。基本上它会检查字符串是否为数字,然后您可以在 while 语句中使用它。请注意,它应该检查一个字符。

    while (!isdigit(some_variable_that_gets_cin)) {
        ....
    }
    

    示例如何获取cin

    char[10] number;
    cin >> number;
    isdigit(number);
    ptr = <int> number;
    

    【讨论】:

    • 那么我怎样才能改变 while(!(cin>>*(ptr1+range))) 到那个?
    • ^ 已更新,您可以在您的实现中拼接这些代码 sn-ps。
    • 应该这样吗?而 (!isdigit(*(ptr1+range)))。第一次输入有问题。它运行了两次,但第三次运行良好
    • 很好,第三次运行良好。那么我认为一旦你的陈述的逻辑位置是正确的,那么你的代码应该可以完美地工作。
    • 当我输入“4e”时。程序这样做了:“输入第一个数字:那不是数字!”下一行要一个数字。当我再次输入 4e 时,它​​工作正常。那么我怎样才能让它在第一次尝试时正常工作。
    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多