检查输入是否为数字,否则将其视为char

时间:2014-03-02 17:44:29

标签: c++ cin

我的问题在于这段代码:

     int number;
     char character;

     cin >> number;

     if(!cin) {
         //input is not a number 
         cin.clear();
         cin.sync();
         cin >> character;
         //other stuff...
     }else{
         //input is a number
         //other stuff...
     }

基本上,我想检查下一个输入是否为数字,如果不是,则将其视为char。问题是,您可以看到我的代码检查输入是否为数字,如果不是,则将NEXT输入视为char。

你能告诉我如何解决这个问题吗?提前谢谢!

另请注意,我不能使用字符串。

3 个答案:

答案 0 :(得分:2)

将输入作为字符串读取,尝试使用std::strtol将其转换为数字,如果失败则将输入视为字符。

答案 1 :(得分:0)

将其读入char中,然后使用is_digit进行检查。另一种方法是使用getline将整行读入char数组缓冲区,然后以某种方式遍历char数组。我可以详细说明这一点。

答案 2 :(得分:0)

查看这个地方给出的例子:

它基本上可以满足您的要求,它基本上与您尝试过的方式相同。 (只是,没有对std::cin.sync()的调用,无论如何它可能对stdin没有任何作用。)

请注意,当提取失败时,字节将保留在缓冲区中。您可以通过稍后std::cin >> c完美地提取它们。也就是说,根据我的理解,你所描述的问题并不存在。

以下是上述链接页面的代码(添加了评论):

#include <iostream>
#include <string>

int main()
{
    double n;
    // try to extract a number from stdin repeatedly
    while( std::cout << "Please, enter a number\n"
           && ! (std::cin >> n) )
    {
        // extraction failed, clear failbit
        std::cin.clear();
        // extract another thing instead, here: a string
        std::string line;
        std::getline(std::cin, line);
        // do something with that string
        std::cout << "I am sorry, but '" << line << "' is not a number\n";
    }
    std::cout << "Thank you for entering the number " << n << '\n';
}

供参考: