C++确保用户输入值仅为int



我对C++有点陌生,如果有任何意见或建议,我将不胜感激!因此,在我们的入门课程项目中,我一直在寻找一种方法来确保在项目进行时做到这一点。正在请求int值,它正确响应!也就是说,在输入双精度和字符串的情况下,它会声明其无效!所以如果cin>>intVariable。。。intVariable将不接受"abdf"或20.01的cin输入。

因此,为了实现这一点,我编写了以下函数。。。它是有效的,但我正在寻找你对如何进一步改进这一过程的想法!

void getIntegerOnly(int& intVariable, string coutStatement)
{
    bool isInteger; // Check if value entered by user is int form or not
    string tmpValue; // Variable to store temp value enetered by user
    cout << coutStatement; // Output the msg for the cin statement 
    do
    {
        cin >> tmpValue; // Ask user to input their value
        try // Use try to catch any exception caused by what user enetered
        {
            /* Ex. if user enters 20.01 then the if statement converts the 
            string to a form of int anf float to compare. that is int value
            will be 20 and float will be 20.01. And if values do not match 
            then user input is not integer else it is. Keep looping untill 
            user enters a proper int value. Exception is 20 = 20.00      */
            if (stoi(tmpValue) != stof(tmpValue))  
            {
                isInteger = false; // Set to false!
                clear_response(); // Clear response to state invalid
            }
            else
            {
                isInteger = true; //Set to true!
                clear_cin(); // Clear cin to ignore all text and space in cin!
            }
        }
        catch (...) // If the exception is trigured!
        {
            isInteger = false; // Set to false!
            clear_response(); // Clear response to state invalid
        }
    } while (!isInteger); //Request user to input untill int clause met
    //Store the int value to the variable passed by reference
    intVariable = stoi(tmpValue); 
}

这只是一个在运行基于Win32控制台的应用程序时让用户年龄大于零的示例!感谢您的反馈:)

一种方法如下:

std::string str;
std::cin >> str;
bool are_digits = std::all_of(
  str.begin(), str.end(), 
  [](char c) { return isdigit(static_cast<unsigned char>(c)); }
);
return are_digits ? std::stoi(str) : throw std::invalid_argument{"Invalid input"};

并且在调用侧捕获异常(stoi也可以抛出std::out_of_range)。

您可以利用stoi()的第二个参数。

string tmpValue;
size_t readChars;
stoi(tmpValue, &readChars);
if(readChars == tmpValue.length())
{
   // input was integer
}

EDIT:这将不适用于包含"."的字符串(例如用科学表示法传递的整数)。

这不是我的工作,但这个问题的答案是你想要的。将字符串作为引用传递给它。如果字符串是整数,则返回true。

如何检查C++字符串是否为int?

相关内容

  • 没有找到相关文章

最新更新