[英]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.