繁体   English   中英

为什么getline多加一行?

[英]Why is getline taking one extra line?

为什么for循环执行m-1次而不是m。 我已经使用getline()输入字符串而不是cin>> 这是我的代码。

#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;
    }
}

因为这:

cin>>n>>m;

尚未从第一行读取行尾字符。

因此第一次通过循环。

cin.getline(s,20);

将读取一个空行。

PS。 最好使用getline()的字符串读取版本。 这样,您可以保证始终可以阅读整行。

在最后cin>>arr[i] ,流中还剩下一个换行符。 因此,在没有您输入的情况下,新行将在for循环的第一次迭代中分配给s ,因此看起来for循环仅迭代m-1次。 有关说明和解决方案,请参见此链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM