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
相关产品推荐
相关产品推荐

