2014-10-31 58 views
-2

我只是停留在一些逻辑语句上。如何在“if”和“while”语句中只允许3个值允许循环退出

特别是那些在功能char GetInteger()所以我怎么会只允许3个值导致循环退出。

char GetInteger(/* out */ char& usrinput) 
{ 
    do 
    { 
     cin >> usrinput; 
     cin.ignore(200,'\n'); 
     if (usrinput != 0 || usrinput != 1 || usrinput != 2) 
     { 
      cout << "Invalid Input." << userinput << " Try Again\n"; 
     } 

    } while(usrinput != 0 || usrinput != 1 || usrinput != 2); 

    return userInput; 
} 
+1

'usrinput'是一个'的std :: string',比较它与'2'是没有意义的:

bool isUserInputValid(char userInput) { return userInput >= '1' && userInput <= '3'; } 

现在我们可以重新写你的原始功能。 'while(usrinput!<= 2)'是无效的语法,即使它是一个数字。你不能指定你声明为返回'void'的函数的值,因为它没有。 – 2014-10-31 03:05:14

+0

所以我应该改变'usrinput'的数据类型?我怎么会得到它只检查它是0-2的值,没有更多,没有字符? – kuthedk 2014-10-31 03:07:16

+0

这里没有实际的问题。当你按下“提问问题”按钮时,你必须提出一个具体的问题。 – 2014-10-31 06:44:27

回答

1

两个问题与此代码:

首先userinput有一个char类型的。所以当你从一个流中读取时,你读取一个字符(在删除空白后)。因此,当用户键入1<enter>时,变量userinput中的字符为'1'。请注意字符'1'与数字1不一样。

因此您的测试应该是:

userinput != '1'; 

其次你的布尔逻辑是错误的。在第一次学习时,有时候更容易将问题陈述为希望可以接受的值的列表(而不是不可接受的值)。

如果userInput有一个您接受的值(任何好值都会使测试失败并因此不会调用错误代码),您希望条件为false。如果你的任何值是有效的,那么第一步是获得真实值。

// If any value is good then true. 
userinput == '1' || userinput == '2' || userinput == '3' 

要翻转此只需添加一个not来表达。

if (! (userinput == '1' || userinput == '2' || userinput == '3')) 

注:在布尔逻辑

!(A || B) => (!A && !B) 

所以你可以重新写上面:

if (userinput != '1' && userinput != '2' && userinput != '3') 

我认为这是你的主要错误,你转换的==!=,但没有将||转换成&&

我还建议您可以通过将其转换为基于范围的测试来简化此操作(因为您可能会得到更有效的结果)。

if (userinput < '1' || userinput > '3') 
{ 
     // Test Failed. 
} 

此外,既然你在两个地方进行了测试。你应该把它拉到自己的功能。然后你可以调用这个函数来做测试。

char GetInteger(/* out */ char& usrinput) 
{ 
    do 
    { 
     cin >> usrinput; 
     cin.ignore(200,'\n'); 
     if (!isUserInputValid(userinput)) 
     { 
      cout << "Invalid Input." << userinput << " Try Again\n"; 
     } 

    } while(!isUserInputValid(userinput)); 

    return userInput; 
} 
0

首先,您应该使用int而不是字符串,因为您正在读取整数。 你可以使用while(1)而不是将条件放入while。 while while循环中,如果您的选择是0或1或2,您可以简单地打破循环。

+0

我不太关注最后一部分,我试图让它继续循环,如果用户输入0-2,在'int main()'中定义的函数将能够退出该程序或从用户定义的输入文件中计数元音/常量。 – kuthedk 2014-10-31 05:34:32