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

C++货币转换程序输入非整数重复提示问题求解

C++货币转换程序输入校验异常修复

问题原因

  • 向int类型变量输入字符串时,cin会进入失败状态,流内的所有输入内容都不会被读取,后续cin操作会直接失效
  • 原有代码仅调用cin.ignore()忽略1个字符,若输入字符串长度大于1,剩余字符会持续触发读取失败,导致提示重复输出
  • 校验逻辑冗余:if分支内重复执行cin >> currency,和外层循环校验逻辑冲突,容易引发逻辑异常

修复方法

  1. 新增<limits>头文件引入缓冲区长度常量
  2. 输入后先判断cin是否处于失败状态,若失败先重置状态,再清空整个输入缓冲区的残留内容
  3. 删除if分支内冗余的输入读取逻辑,统一由外层循环处理输入校验

修复后完整代码

#include <iostream>
#include <string>
#include <limits>

using namespace std;

int main()
{
    int currency = 0;

    string USD = "USD";
    string EUR = "EUR";
    string JPY = "JPY";
    string GBP = "GBP";
    string CHF = "CHF";
    string CAD = "CAD";
    string AUD = "AUD";
    string ZAR = "ZAR";


    cout << "***Currency Converter***\n\n";

    do {
        cout << "Select initial currency\n";
        cout << "1. " << USD << "\n";
        cout << "2. " << EUR << "\n";
        cout << "3. " << JPY << "\n";
        cout << "4. " << GBP << "\n";
        cout << "5. " << CHF << "\n";
        cout << "6. " << CAD << "\n";
        cout << "7. " << AUD << "\n";
        cout << "8. " << ZAR << "\n";

        cin >> currency;

        // 校验输入合法性
        if (cin.fail() || currency <= 0 || currency >= 9) {
            cout << "Please enter a valid input\n";
            cin.clear(); // 重置输入流状态
            // 清空整个输入缓冲区所有残留字符,直到遇到换行符
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }

    } while (cin.fail() || currency <= 0 || currency >= 9);

    if (currency == 1) {
        cout << "You've selected USD\n";
    }
    else if (currency == 2) {
        cout << "You've selected EUR\n";
    }
    else if (currency == 3) {
        cout << "You've selected JPY\n";
    }
    else if (currency == 4) {
        cout << "You've selected GBP\n";
    }
    else if (currency == 5) {
        cout << "You've selected CHF\n";
    }
    else if (currency == 6) {
        cout << "You've selected CAD\n";
    }
    else if (currency == 7) {
        cout << "You've selected AUD\n";
    }
    else if (currency == 8) {
        cout << "You've selected ZAR\n";
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者skylar.gmaker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:15:03