0

我有这个代码:

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

4 回答 4

2

第一个示例包括您的输入。

输入

12

输出

12
13

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

输入:

12 12 12 12 

相当于

12
12
12
12

输出:

12
13
12
13
12
13
12
13
于 2013-06-25T07:44:55.067 回答
0
int obj; 
cin >> obj;

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

于 2013-06-25T07:53:32.540 回答
0

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

在第二种情况下,它读取 12,打印 12 和 13,然后返回,读取另一个 12,打印 12 和 13,依此类推 2 次。然后回去等待您输入更多数据。

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

于 2013-06-25T07:47:17.630 回答
0

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

于 2013-06-25T07:48:10.537 回答