如何限制用户输入的数字位数?C++代码else分支问题排查
问题分析与修复方案
你的代码存在几处关键语法与逻辑错误,直接导致else分支无法正常工作:
1. if语句后的多余分号
两个if条件末尾的分号;是致命错误——分号会让if的逻辑体变成空语句,后面的大括号{}会被当作独立代码块,不管条件是否成立都会执行里面的错误提示和return main()。比如:
if (val < 100000); // 此处分号完全破坏了if的逻辑 { // 这段代码会无条件执行 }
2. 错误的else分支结构
最后一个else后面的if没有任何条件,属于语法错误;且原本的逻辑是当输入数值在合法区间时执行正确分支,不需要额外嵌套if。
修复后的代码
cout << "Veuillez entrer votre nombre de 6 chiffres : "; cin >> val; if (val < 100000) // 去掉末尾分号 { cout << "Erreur! Veuillez recommencez avec un nombre a 6 chiffres. " << endl << endl; return main(); } else if (val > 999999) // 合并为else-if结构,去掉末尾分号 { cout << "Erreur! Veuillez recommencez avec un nombre a 6 chiffres. " << endl << endl; return main(); } else // 直接进入合法分支,无需额外if { nb1 = val / 100000 % 10; cout << nb1; }
额外优化建议
递归调用main()不符合C++标准规范,建议用循环实现重复输入逻辑:
#include <iostream> using namespace std; int main() { int val, nb1; while (true) { cout << "Veuillez entrer votre nombre de 6 chiffres : "; cin >> val; if (val < 100000 || val > 999999) { cout << "Erreur! Veuillez recommencez avec un nombre a 6 chiffres. " << endl << endl; continue; } nb1 = val / 100000 % 10; cout << nb1; break; } return 0; }
内容的提问来源于stack exchange,提问作者Benjkf5
相关产品推荐
相关产品推荐

