c++ - while循环中断,我不知道为什么

标签 c++ c++11 while-loop codeblocks

我正在为计数器编写代码。如果我将“a”作为输入,它应该 +1 计数器并将其显示在屏幕上。但是当我这样做时,它在屏幕上显示 1 并且程序结束。我希望它一直运行直到并且除非我提供其他字符作为输入。我犯了什么错误?

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    int Counter = 0;
    char t;

    while(true)
    {
        t = cin.get();
        if(t == 97)
        {
            Counter = Counter + 1;
        }
        else
            break;
        system("cls");
        cout << Counter;
    }
    return 0;
}

最佳答案

问题是当您输入 'a' 时,您可能也在按 Enter,这被解释为另一个 char .第二个 char 绝对不是 a,所以你的程序中断了。这可以通过输出你读到的内容来验证:

for (;;) {
    std::cout << '?';
    char t = std::cin.get();
    std::cout << (int)t << '\n';
    if (t != 'a') break;
}
std::cout << "done\n";

运行时打印:

?a
97   // this is 'a'
?10  // this is '\n', note the additional ?
done

最简单的修复方法是在 cin 上使用输入流运算符,这会丢弃输入中的空格(而 get() 不会):

char t;
for (;;) {
    std::cout << '?';
    std::cin >> t;
    std::cout << (int)t << '\n';
    if (t != 'a') break;
}
std::cout << "done\n";

运行时产生:

?a
97 
?b
98 
done

这正是您想要的。

关于c++ - while循环中断,我不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30217418/

相关文章:

C++ 本地范围以减少内存?

c++ - 在 C++ 中以相反的顺序打印我的链表

c++ - 在 C++11 中抛出异常时是否使用 move 语义?

c++ - 有没有比使用 "if"更快/更短的方式在 C++ 中进行这些测试?

c++ - 2个操作数的产品类型

C++:库导入错误 (‘stdin_fileno’ 未在此范围内声明)

c - 子进程如何在读取第一条消息后不离开while循环?

javascript - While 循环语法错误

c++ - 为什么数据文件的第一行被跳过c++

c++ - 如何将 CArray (MFC) 移植到 linux