奇怪的 if 语句行为
Weird if Statement Behaviour
当以下代码出现在 cin 语句中时:如果我输入 -1,它仍然会运行我在最后一个 else if 部分中找到的 invalidSelectorError()... 即使如果 mainMenuSelector 是应该传递该部分等于-1.
为什么??
(顺便说一句,在 invalidSelectorError() 运行后,包含所有内容的 while 循环正常运行,程序按预期终止。)
int mainMenuSelector;
while(mainMenuSelector != -1){
cout << "--- MAIN MENU -----------------" << endl;
cout << "[1] Create New Contact" << endl;
cout << "[2] View Existing Contacts" << endl;
cout << "[3] View or Edit Data Fields" << endl;
cout << "-------------------------------" << endl;
cout << "Or just press ENTER to quit." << endl;
cout << "-------------------------------" << endl;
cout << "Selection: ";
mainMenuSelector = -1;
cin >> mainMenuSelector;
cin.ignore();
if(mainMenuSelector == 1){
contactCreator();
}else if(mainMenuSelector == 2){
contactViewer();
}else if(mainMenuSelector == 3){
dataFieldViewer();
}else if(mainMenuSelector != 1 ||
mainMenuSelector != 2 ||
mainMenuSelector != 3 ||
mainMenuSelector != -1
){
invalidSelectorError();
}
}
return 0;
你应该使用 &&
而不是 ||
:
if(mainMenuSelector != 1 &&
mainMenuSelector != 2 &&
mainMenuSelector != 3 &&
mainMenuSelector != -1
){
因为这部分:
else if(mainMenuSelector != 1 ||
mainMenuSelector != 2 ||
mainMenuSelector != 3 ||
mainMenuSelector != -1
){
invalidSelectorError();
您正在使用||。因此,只要由 || 分隔的这四个语句之一为真(出于显而易见的原因,情况总是如此),那么您的代码将进入 'if'[= 之后的代码块11=]
当以下代码出现在 cin 语句中时:如果我输入 -1,它仍然会运行我在最后一个 else if 部分中找到的 invalidSelectorError()... 即使如果 mainMenuSelector 是应该传递该部分等于-1.
为什么??
(顺便说一句,在 invalidSelectorError() 运行后,包含所有内容的 while 循环正常运行,程序按预期终止。)
int mainMenuSelector;
while(mainMenuSelector != -1){
cout << "--- MAIN MENU -----------------" << endl;
cout << "[1] Create New Contact" << endl;
cout << "[2] View Existing Contacts" << endl;
cout << "[3] View or Edit Data Fields" << endl;
cout << "-------------------------------" << endl;
cout << "Or just press ENTER to quit." << endl;
cout << "-------------------------------" << endl;
cout << "Selection: ";
mainMenuSelector = -1;
cin >> mainMenuSelector;
cin.ignore();
if(mainMenuSelector == 1){
contactCreator();
}else if(mainMenuSelector == 2){
contactViewer();
}else if(mainMenuSelector == 3){
dataFieldViewer();
}else if(mainMenuSelector != 1 ||
mainMenuSelector != 2 ||
mainMenuSelector != 3 ||
mainMenuSelector != -1
){
invalidSelectorError();
}
}
return 0;
你应该使用 &&
而不是 ||
:
if(mainMenuSelector != 1 &&
mainMenuSelector != 2 &&
mainMenuSelector != 3 &&
mainMenuSelector != -1
){
因为这部分:
else if(mainMenuSelector != 1 ||
mainMenuSelector != 2 ||
mainMenuSelector != 3 ||
mainMenuSelector != -1
){
invalidSelectorError();
您正在使用||。因此,只要由 || 分隔的这四个语句之一为真(出于显而易见的原因,情况总是如此),那么您的代码将进入 'if'[= 之后的代码块11=]