C++中If-Else语句无论输入什么均返回‘Program Aborted’问题求助
问题分析与修复方案
嘿,我一眼就揪出你代码里的两个关键问题,正是它们导致不管输入什么都会触发"Program Aborted":
1. 逻辑条件完全写反(核心问题)
你在else if里写的判断条件:
ch!='n' || ch!='N' || ch != 'y' || ch != 'Y'
用了或运算符||,这意味着只要其中一个条件成立,整个表达式就为真。但仔细想:任何输入的字符都不可能同时等于n、N、y、Y这四个值,所以不管你输入什么,至少有三个条件是成立的——比如输入Y时,ch!='n'是真,整个表达式直接判定为真,直接走进终止分支。
正确的逻辑应该是判断输入既不是Y/y,也不是N/n,要么把||换成与运算符&&,要么更清晰地拆分分支:先处理Y/y,再处理N/n,最后用else捕获所有无效输入。
2. 两处语法错误
cin >> ExtraCredit后面缺少分号;,会直接导致编译失败;cout<< Invalid entry. Program Aborted."里的字符串开头少了双引号,应该是"Invalid entry. Program Aborted."。
修复后的完整代码
#include <iostream> using namespace std; int main() { int ch; cout << "Do you have any extra credit points? (Enter Y/y or N/n)" << endl; cin >> ch; int ExtraCredit; if (ch == 'Y' || ch == 'y') { cout << "Enter the number of extra credit points: "; cin >> ExtraCredit; // 补充分号 } else if (ch == 'N' || ch == 'n') { ExtraCredit = 0; // 输入N/n时正常设置为0,不终止程序 } else { // 仅当输入不是指定字符时才触发终止 cout << "Invalid entry. Program Aborted." << endl; // 补上开头引号 return 0; } // 这里可以添加后续逻辑,比如输出最终加分 cout << "Your extra credit points: " << ExtraCredit << endl; return 0; }
这样修改后,程序就能正确区分有效输入(Y/y、N/n)和无效输入了,只有输入非指定字符时才会触发终止提示。
内容的提问来源于stack exchange,提问作者Noles95
相关产品推荐
相关产品推荐

