退出do / while循环而不使用中断

时间:2014-08-25 17:16:23

标签: c++ loops break do-while

我的学校问题与这样的程序有关:

用户可以输入的字符串是电话号码或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");

2 个答案:

答案 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;