C++ 输入字符而不是int C++;
我正在编写一个代码,当输入整数数据类型或字符时,该代码将计数C++ 输入字符而不是int C++;,c++,C++,我正在编写一个代码,当输入整数数据类型或字符时,该代码将计数 int numero, countInteger = 0; countCharacter = 0; while ( 1 ) { try { cin >> numero; cout << numero; throw numero;
int numero,
countInteger = 0;
countCharacter = 0;
while ( 1 ) {
try {
cin >> numero;
cout << numero;
throw numero;
} catch (...) {
countCharacter++;
cout << "Error";
}
}
整数,
countInteger=0;
countCharacter=0;
而(1){
试一试{
cin>>数字;
cout当您尝试读取一个整数,并且您将非整数的内容作为输入时,会发生两件事:第一件事是流获得了它的failbit
集,第二件事是没有提取输入。因此,下一次迭代您会一次又一次地读取相同的输入
我建议另一种策略:读一个字符,然后看看它是一个字符、一个字符还是其他完全不同的东西。或者,如果你需要实际的完整数字,读一个字符串,然后尝试
澄清:使用std::cin
的输入是缓冲的。当您使用输入运算符>
时,std::cin
会从缓冲区中提取字符。如果您试图读取一个数字,但缓冲区中的第一个字符不是数字,则输入运算符将失败,并将字符保留在缓冲区中
简单(希望如此)的例子:
假设你有这个代码
int number;
std::cin >> number;
std::cin >> number;
std::cin >> number;
作为该部分代码的输入,您可以输入
123abc
现在我们来看第二个输入,代码将看到第一个字符不是数字,因此它将在流中设置failbit
,并保持输入不变:
abc
最后一个关于使用异常的注释:大多数人都认为它是坏的。异常是例外情况,不是程序正常流程的一部分。抛出异常是昂贵的,破坏正常的流程。只使用它们作为异常的东西,比如错误。< /P>无限循环是由于while条件。。程序无法退出循环。我知道。但我认为您更关注代码的逻辑。我知道这会创建一个无限循环,但会设置退出条件。它不允许我重新读取一个新数字。我想要一个100个键盘输入的示例,告诉我一个数字输入了多少次,一个字符输入了多少次entered。没有输入完整代码是一个错误。我只是想更多地关注一个事实,即不允许我再次返回以输入一个数字作为一个无限循环(我知道这在while(1)中很明显,但这将设置一个退出条件,当输入一个字符时,它将是一个异常并启动一个无限循环).如果不太麻烦的话,提案中可能会更明确谢谢Joachim Pileborg!
abc
int countDigit = 0;
int countCharacter = 0;
char ch;
while (std::cin >> ch)
{
if (std::isdigit(ch))
++countDigit;
else if (std::isalpha(ch))
++countCharacter;
else
{
// Not a digit or an alphabetic character
// I.e. newlines, spaces, control characters, etc.
}
}