2014-09-06 62 views
0

爲什麼for循環執行m-1次而不是m。 我用getline()輸入字符串而不是cin>>。 這是我的代碼。爲什麼getline多走一條線?

#include <iostream> 
#include <string> 
#include <vector> 
#include <iterator> 
#include <algorithm> 
#include <cstdio> 

using namespace std; 

int main() { 

    int n; 
    int m; 
    int a; 

    cin >> n >> m; 

    int arr[10000]; 

    for(int i = 0; i < n; i++) { 
     cin >> arr[i]; 
    } 

    char s[200]; 

    ostream_iterator<int> screen(cout," "); 

    for(int i = 0; i < m; i++) { 
     cin.getline(s,20); 
     int p = s[2]-48; 
     cout << p << endl; 
    } 
} 

回答

1

在上一個cin>>arr[i]之後,流中還有一個換行符。所以在for循環的第一次迭代中,新行將被分配到s,而沒有輸入,因此它看起來像for循環只會迭代m-1次。有關說明和解決方法,請參閱此link

2

正因爲如此:

cin>>n>>m; 

沒有從第一行讀行字符結束。

因此第一次通過循環。

cin.getline(s,20); 

將讀取一個空行。

PS。傾向於使用字符串閱讀版本getline()。這樣你保證你總是可以閱讀完整的一行。