为什么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;
}
}
答案 0 :(得分:2)
因为:
cin>>n>>m;
没有从第一行读取行尾字符。
因此第一次通过循环。
cin.getline(s,20);
将读取空行。
PS。更喜欢使用getline()
的字符串阅读版本。这样你就可以保证你可以随时阅读一整行。
答案 1 :(得分:1)
在上一次cin>>arr[i]
之后,流中还有一个换行符。因此,在没有输入的情况下,新行将在for循环的第一次迭代中分配给s
,因此看起来for循环只迭代m-1
次。有关说明和解决方案,请参阅此link。