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

Passing non integer input through console

本文关键字:整数 输入 控制台      更新时间:2023-10-16

我有这个代码:

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

有人能解释一下吗?

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

输入

12

输出

12
13

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

输入:

12 12 12 12 

相当于

12
12
12
12

输出:

12
13
12
13
12
13
12
13

只有在您点击"回车"后,循环才会读取任何输入。因此,在第一种情况下,它读取一个值12,打印12,然后打印13作为temp中的更新值,然后返回等待您键入更多数字。

在第二种情况下,它读取12,打印12&13,然后返回,读取另一个12,打印12&13等等再重复2次。然后返回,等待您键入更多数据。

请注意,空白是输入的适当分隔符。如果你想让它出错,试着键入12a,在这种情况下,它会打印12&13永远(好吧,直到你感到无聊并停止它),因为它会在"a"处"停止阅读"而不更新obj——而且因为循环中没有任何东西清除a,所以它会继续。

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

int obj; 
cin >> obj;

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