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

C++中如何用if else判断变量类型并实现分支逻辑

在C++中判断输入是否为整数的解决方案

要判断输入的变量是否为整数,核心是检查cin读取整数时的状态——当输入内容无法转换为int类型时,cin会进入失败状态。针对你代码里的if位置,可按以下方式实现:

修改后的关键代码片段

#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <limits> // 必须包含此头文件以使用numeric_limits
using namespace std;

int main() {
    char pilih,pilih2;
    int p, l, a, t, r,ulang = 4;
    float luas1, luas2, luas3, keliling1, keliling2, keliling3, phi = 3.14;
    
    while (ulang > 0) {
        pilihUlang:
        cout << "Pilih jenis bangun datar berikut :\n 1. Persegi panjang\n 2. Segitiga sama sisi\n 3. Lingkaran" << endl;
        cout << "Masukan pilihan anda [1/2/3] : ";
        cin >> pilih;
        system("cls");
        switch (pilih) {
        case '1':
            system("color 07");
            cout << "Luas Dan Keliling Persegi Panjang" << endl;
            ulangInputPanjang: // 新增标签,用于重新输入长度
            cout << "Masukan Panjang = ";
            cin >> p;
            if (!cin.fail()) { // <-- 这里的判断条件
                cout << "Masukan Lebar = ";
                cin >> l;
                // 同样给宽度输入加验证,逻辑和长度一致
                if (!cin.fail()) {
                    system("cls");
                    cout << "Luas dan keliling Persegi Panjang dengan panjang " << p << " dan lebar " << l << ", yaitu :" << endl;
                    luas1 = p * l;
                    keliling1 = 2 * (p + l);
                    cout << "Luas = " << luas1 << endl;
                    cout << "Keliling = " << keliling1 << endl;
                    cout << "Sisa bisa memilih ulang " << ulang - 1 << " kali." << endl;
                    ulang--; // 减少可重复选择次数
                    break;
                } else {
                    // 处理宽度输入错误
                    cin.clear();
                    cin.ignore(numeric_limits<streamsize>::max(), '\n');
                    system("cls");
                    cout << "Input tidak valid! Harus memasukan angka bulat.\n";
                    goto ulangInputPanjang;
                }
            }
            else {
                // 重置cin状态并清空错误输入缓冲区
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
                system("cls");
                cout << "Input tidak valid! Harus memasukan angka bulat.\n";
                goto ulangInputPanjang; // 回到输入长度的步骤
            }
        // 其他case逻辑...
        }
    }
    return 0;
}

关键逻辑说明

  • !cin.fail():判断cin读取int变量是否成功,失败时cin.fail()返回true,取反后表示读取有效整数。也可替换为cin.good(),效果一致。
  • cin.clear():重置cin的错误状态标记,不清理缓冲区,否则后续所有输入操作都会直接失败。
  • cin.ignore(numeric_limits<streamsize>::max(), '\n'):清空输入缓冲区中所有错误内容直到换行符,避免错误内容干扰下一次输入。
  • 新增ulangInputPanjang标签:输入错误时直接跳回长度输入步骤,比回到最外层选择更友好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:10:26