通过控制台传递非整数输入

时间:2013-06-25 07:40:55

标签: c++ console

我有这段代码:

int obj;

    while ( std::cin >> obj )
    {
        std::cout << obj << std::endl ;
        int temp = obj ;
        ++ temp;
        std::cout << temp << std::endl ;
    }

当我给出正确的整数输入时,我理解输出。

例如。如果我得到12作为输入,我在控制台上看到这样的东西:

12
12
13

但是,如果我给一些带有空格的整数作为输入,我似乎无法理解输出。

例如。如果我输入12 12 12 12作为输入,我会在控制台上看到:

12 12 12 12
12
13
12
13
12
13
12
13

有人可以解释一下吗?

4 个答案:

答案 0 :(得分:2)

第一个例子包括你的输入。

输入

12

输出

12
13

对于作为输入接收的4个数字中的每一个,第二个例子就是这个,乘以4倍。分隔符是“空格” - 空格,新行或制表符。它不是“非整数”,而是“四个整数”:

输入:

12 12 12 12 

相当于

12
12
12
12

输出:

12
13
12
13
12
13
12
13

答案 1 :(得分:0)

只有在您点击“输入”后,循环才会读取输入内容。所以在第一种情况下,它读取一个值12,打印12然后打印13以获取temp中的更新值,然后返回等待您键入更多数字。

在第二种情况下,它读取12,打印12&amp; 13,然后回去,读另外12,打印12&amp; 13,等等2次。然后返回等待您输入更多数据。

请注意,空格是输入的正确分隔符。如果你想要它出错,尝试输入12a,在这种情况下它将打印12&amp; 13永远(好吧,直到你感到无聊并停止它),因为它会在'a'处“停止阅读”而不更新obj - 因为循环中的任何内容都不会清除a,继续前进。

答案 2 :(得分:0)

添加空格时,会将它们作为单独的值。并为每个人运行while循环。

答案 3 :(得分:0)

int obj; 
cin >> obj;

cin从输入中读取有效的整数数据,直到找到不属于整数的字符,或者没有更多数据。在您的第一个示例中,cin命中输入的结尾并返回数字。在第二个示例中,cin从字符串"12 12 12 12"读取输入,从输入流中提取第一个整数并将其写入obj。在你的while循环的下一次运行中,cin面对字符串"12 12 12"(因为它已经从输入流中提取/删除了第一个数字),故事继续进行,直到没有更多的输入要读取。< / p>