Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 输入字符而不是int C++;_C++ - Fatal编程技术网

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.
    }
}