两个输入到while循环中

时间:2012-10-06 22:37:58

标签: c++ vector while-loop conditional-statements

我的代码的基本思想是让用户输入0-9的拼写,即零,一个等或实际数字,并分别输出数字/拼写。

我设法使用while(cin >> number)(数字是字符串变量)使用while循环执行此操作,然后使用if语句选择适当的输出选项,即“零” - > 0和“0” - >零。

起初虽然我尝试按以下方式进行,但

while (cin >> number || cin >> n) 
{
    if (n == 0)
        cout << digits[0] << endl;
           .
           . 
           .
    else if (n == 9)
        cout << digits[9] << endl;  

    if (number == digits[0])
        cout << 0 << endl;
           .
           .
           .
    else if (number == digits[9])
        cout << 9 << endl;  
}

digits只是一个存储字符串“0”,“1”等的矢量类。

这不起作用,当输入一个字符串时输出是正确的但是当输入一个整数时输出总是“零”。我想知道为什么这不起作用?我认为它与while循环条件有关。计算机无法识别是否输入了字符串/整数并执行相应的操作?

2 个答案:

答案 0 :(得分:3)

问题是cin >> number总是会成功,因为numberstring(只要你没有点击EOF或其他一些失败条件);如果用户输入数字,number将把数字保存为字符串。所以cin >> n不会发生。

您应该将number与字符串"0" ... "9"进行比较(除了测试数字名称之外)。您还应该使用循环而不是if/else if链。

答案 1 :(得分:0)

我认为您不了解||运算符的用法。 while (cin >> number || cin >> n)表示执行cin >> number,如果该表达式评估false,则执行cin >> n,如果其中任何一个评估true,则执行括号内的操作。< / p>

正如nneonneo所说,cin >> number将(几乎)总是评估true,所以cin >> n永远不会发生,但这实际上是你问题中最少的。

如果我建议的话,我认为你现在应该完全摆脱while循环,只关注一次。你需要的是cin >> number,然后对天气进行测试,或者number"0""1",... {{ 1}}号码,或"9""zero",... "one"号码。然后你可以决定如何将一个转换为另一个。