2010-09-09 297 views
0

嗨我有关于cin和缓冲区的问题。 我想制作一个简单的采用整数的io程序。cin和缓冲区问题

无论如何,我偶然发现缓冲区的问题。在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; 
} 

回答

1

该代码应打印出漂亮的任何系统上的第一个数字。

cout << " "; 

cout << " " << i; 

因此,许多国家的准则做每行只有一个操作。 cin只是光学上的杂乱的阅读。其实你从来没有输出i第一次例外。

+0

啊,真的..我没有看到那一个^^; – starcorn 2010-09-09 20:18:52

+0

没问题,我想你可能会重新编写代码来找出问题所在。 :-) – jdehaan 2010-09-09 20:21:06

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(); 

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