2010-09-09 289 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(); 

我不能說我特別興奮的是功能,但在這種情況下,它在大概至少比沒有好一點(只是不是更好)。