C++程序中getline无法读取多行输入的问题排查
C++多行输入读取异常的修复方案
你的程序出现问题的核心原因是for循环语句末尾多了一个分号,这个分号会让for循环成为一个空循环:
for (i = 0; i < N; i++); // 这里的分号是错误根源
程序会直接执行完N次空循环,此时变量i的值已经等于N(比如输入3时,i最终是3)。之后只会执行一次getline读取输入,然后输出结果,所以你输入第一行后程序就结束了。
修复后的代码如下:
#include <iostream> #include <string> using namespace std; int main(void){ int N, i; string inptstr, temp; getline(cin, temp); N = stoi(temp); // 移除for循环末尾的分号,并用大括号包裹循环体 for (i = 0; i < N; i++) { getline(cin, inptstr); cout << "Line entered no. " << i+1 << ": " << inptstr << endl; } return 0; }
额外补充一个细节:你原来的输出中i从0开始计数,输入3时第一次循环会显示Line entered no. 0,如果需要从1开始计数,可以把输出里的i改成i+1,就像上面代码中那样。
内容的提问来源于stack exchange,提问作者YWH
相关产品推荐
相关产品推荐

