我的学校问题与这样的程序有关:
用户可以输入的字符串是电话号码或X
(如果他们想要退出)。内循环充满了检查电话号码并确保其长度和格式正确的功能,并在检测到错误时提示用户再次输入等。
只要输入电话号码,这段代码就可以正常工作。当我输入X
时,它会将X
识别为需要转到内部循环以检查长度和格式的内容,而不是仅仅退出。
我已经尝试了很多不同的方法来解决这个问题,我唯一可以开始工作的是break
语句,我的教授不接受。
如何在不使用do
的情况下编写此while
/ break
循环?我在初始选择提示下方放置了cout
语句,它显示已输入X
,但如果不使用,它仍然无法退出:
if(selection == "x" || selection == "X")
break;
相反,它将X发送到do / while循环以将格式更正为数字###-###-####
:
string selection;
do
{
cout << "Please select a number from the list or type 'X' to exit: ";
cin >> selection;
cout << endl;
//if(selection == "x" || selection == "X")
//break;
if(selection != "x" || selection != "X")
do
{
checking length function
.
.
.
checking format function
} while(argument is true);
resultFunc(prints the phone number + billing info from the parallel array);
} while(selection != "x" || selection != "X");
答案 0 :(得分:4)
if(selection != "x" || selection != "X")
需要:
if(selection != "x" && selection != "X")
这是De Morgan's laws.的典型示例您想知道selection
是“x” 还是 “X”,所以相反如果selection
不是“x” 且 不是“X”,那就是。
答案 1 :(得分:2)
首先,您需要正确编写测试:
while(selection != "x" && selection != "X");
其次,不要两次进行此测试,只需执行一次并将结果存储在布尔值中:
bool exitLoop = false;
do
{
cout << "Please select a number from the list or type 'X' to exit: ";
cin >> selection;
cout << endl;
if (selection == "x" || selection == "X")
exitLoop = true;
if ( !exitLoop )
{
// do stuff because input isn't X
}
} while (!exitLoop);
布尔值exitLoop
清楚地说明了循环终止的原因,而不是在多个地方对“X”进行重复测试。
另外,您可以使用toupper
函数,而不是检查低位和高位“X”:
#include <cctype>
//...
if (std::toupper(selection[0]) == "X" )
exitLoop = true;