0

嗨,我对 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;
}
4

2 回答 2

1

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

cout << " ";

相对

cout << " " << i;

因此,许多指南规定每行只执行一项操作。cin 只是在光学上使读数混乱。实际上你从来没有输出i过第一次。

于 2010-09-09T20:14:34.047 回答
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();

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

于 2010-09-09T20:27:04.457 回答