簡體   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