cin和缓冲问题

时间:2010-09-09 20:09:23

标签: c++ buffer cin

嗨我对cin和缓冲区有疑问。 我想制作一个简单的io程序,它采用整数。

无论如何我偶然发现了缓冲区问题。在windows7中使用MinGW,以下代码将打印出我输入的所有四个整数。但是当我切换到SunOS并用G ++编译它时,它只打印出第一个整数。这是编译器问题还是操作系统问题?

#include <iostream>

using namespace std;

int main()
{
   int i;

   cout << "Enter four integers: ";
   cin >> i;
   cout << "\nYou entered the numbers: " << i << " ";

   cin >> i; cout << " ";
   cin >> i; cout << " ";
   cin >> i; cout << " ";

   return 0;
}

2 个答案:

答案 0 :(得分:1)

代码应在任何系统上打印出第一个数字。

cout << " ";

cout << " " << i;

因此,许多指南声明每行只能进行一次操作。 cin只是在视觉上使阅读混乱。实际上你从来没有输出i除了第一次。

答案 1 :(得分:1)

在这些方面:

cin >> i; cout << " ";
cin >> i; cout << " ";
cin >> i; cout << " ";

...你正在读一个数字(如果可能的话),但只是打印出一个空格,不是你刚读过的数字。如果你真的需要这样做,我可能会写一个小函数,并使用它:

int get_input() { 
    int ret;
    cin >> ret;
    cout << ret;
    return ret;
}

// ...
cout << "Enter four integers: ";

for (int i=0; i<4; i++)
    get_input();

我不能说我对这个功能特别兴奋,但在这种情况下,它可能至少比没有好一点(只是很多更好)。