You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中while>>cin循环无法通过回车退出的二十一点计牌问题

解决二十一点计牌程序的循环退出问题

原代码的问题在于使用cin >> currcard时,输入操作会自动跳过所有空白字符(包括回车、空格、制表符),所以当用户仅按下回车时,程序会一直等待有效字符输入,无法触发循环退出。要实现“输入若干字符后按回车处理,输入空行(仅回车)退出”的逻辑,我们需要改为读取整行输入,逐行处理字符,检测空行时退出循环。

修改后的代码如下:

#include<iostream>
#include<string> // 需要包含string头文件来使用std::string

using namespace std;

int main(){
    int count = 0;
    string line; // 用string存储整行输入
    cout << "Enter cards seen on table (press Enter alone to exit): " << endl;

    while (getline(cin, line)) // 读取整行输入,直到输入结束或空行
    {
        if (line.empty()) { // 检测空行,退出循环
            break;
        }
        // 遍历当前行的每个字符
        for (char currcard : line) {
            switch (currcard)
            {
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                    count++;
                    break;

                case '7':
                case '8':
                case '9':
                    break;

                case 'A':
                case 'J':
                case 'Q':
                case 'K':
                    count--;
                    break;

                default:
                    cout << "Invalid Entry: '" << currcard << "' ";
                    break;
            }
        }
    }
    cout << "Current count: " << count << endl;
    return 0;
}

关键修改说明:

  • 改用getline(cin, line)读取整行:getline会读取用户输入的一整行内容(包括空格,但不包含末尾的换行符),当用户仅按回车时,line会成为空字符串。
  • 检测空行退出循环:在每次读取行后,判断line.empty(),如果为真则执行break退出循环。
  • 遍历行内字符处理:用范围for循环遍历每行的每个字符,实现原有的计牌逻辑。
  • 包含<string>头文件:因为使用了std::string类型,必须包含对应的头文件。

内容的提问来源于stack exchange,提问作者fearlessShopkeeper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:35:17