2014-09-06 30 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()。这样你保证你总是可以阅读完整的一行。