我的问题在于这段代码:
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。
你能告诉我如何解决这个问题吗?提前谢谢!
另请注意,我不能使用字符串。
答案 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';
}
供参考: