请原谅我的愚蠢,因为我刚开始学习C ++,但我遇到了令我困惑的事情。下面的代码是我按照C ++ Primer第5版PDF here找到的例子。
#include<iostream>
int main(){
int sum = 0, value = 0;
while (std::cin >> value)
sum += value;
std::cout << "Sum is: " << sum << std::endl; //this doesn't do anything
std::cin.ignore().get();
return 0;
}
现在由于某种原因,最后一个std::cout
语句根本没有做任何事情,除了std::cin.ignore().get()
之外,它让我感到困惑,这与pdf中的示例完全相同这没有任何作用。最让我困惑的是,如果我从while循环内部写value
,你可以发现它不会无限重复;它会在最后一个输入值之后停止,因此错误不应该在while循环的执行中。
感谢任何帮助,谢谢!
编辑:我正在使用Visual Studio 2013 Ultimate
EDIT2:我正在使用的输入是3 4 5 6
EDIT3:为了比较,这里是C ++ Primer第5版的代码:
#include <iostream>
int main()
{
int sum = 0, value = 0;
// read until end-of-file, calculating a running total of all values read
while (std::cin >> value)
sum += value; // equivalent to sum = sum + value
std::cout << "Sum is: " << sum << std::endl; return 0;
}
所以仅之间的区别是std::cin.ignore().get()
。
答案 0 :(得分:5)
while (std::cin >> value)
表示在读取整数失败之前它不会停止,即遇到EOF
或非整数输入。
在Windows上,使用^ Z( Ctrl Z )输入EOF
。
尝试输入:
1 2 3 4
^Z
它应该击中cout线。这是关于cin.ignore()
内容的完全不同的问题。