2014-01-29 15 views
1

下面是代碼:cin和getline在一個程序中,只有其中一個生效?

#include <iostream> 
#include <stdio.h> 

using namespace std; 

int main(int argc, char const* argv[]) 
{ 
    char s1[23]; 
    char s2[23]; 
    // cin >> s1; 
    cin.getline(s2, 22); 
    cout << s1 << endl; 
    cout << s2 << endl; 
    return 0; 
} 

如果我取消對該行cin >> s1,然後getline函數將被跳過,不知道爲什麼會這樣。

+0

它對我的工作,如果沒有註釋..... – Netwave

+0

它不會被跳過,但它沒有更多的東西在第一個換行符之前閱讀。 – Erbureth

+0

您需要了解'cin >>'和'cin.getline'如何處理行尾。在沒有評論的情況下,有一條線就結束了,就是所有的「getline」。 – crashmstr

回答

5

它沒有被跳過,但您必須瞭解每個輸入方法如何處理空白。 >>跳過開始處的空白處,然後提取直到下一個字符爲空白,然後停止。請注意,它會在流中留下空白字符。

getline()提取,直到它提取換行符(並放棄換行符,不存儲它)。

因此,當>>運行時,它讀取字符串。我假設你輸入一個單詞並Enter(它產生一個換行符)。該字由>>提取,然後在遇到換行符時停止。 換行符仍在流中。

然後getline()運行並提取字符,直到它提取換行符。猜猜看,這是它發現的第一個字 - >>

相關問題