0

我的代码的基本思想是让用户输入 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只是一个存储字符串“零”、“一”等的向量类。

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

4

2 回答 2

3

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

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

于 2012-10-06T22:46:07.970 回答
0

我认为您不了解||运算符的用法。while (cin >> number || cin >> n)表示 do cin >> number,如果该表达式计算false,则 do cin >> n,如果其中一个计算true,则执行括号内的内容。

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

如果我可以建议的话,我认为你现在应该完全摆脱while循环,只专注于做一次。您需要的是cin >> number然后对天气进行测试number是否是"0", "1",..."9"数字或"zero", "one",..."nine"数字。然后,您可以决定如何将一种转换为另一种。

于 2012-10-06T23:39:45.960 回答