cin,scanf后使用getline() 函数的易错点

 
 1 #include <iostream>
 2 #include <string>
 3 #include <cstdio>
 4 #include <ctime>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     string s, sum;
10     int n;
11     while (scanf("%d", &n) != EOF) {
12         while (n) {
13             getline(cin, s);
14             sum += s;
15             --n;
16         }
17         cout << sum << endl;
18     }
19     
20 
21 }

经过调试发现编译器第一次经过getline()时什么也不做,知道第二次经过getline()时程序才会提示你让你输入s

所以当你输入n时,实际只能再输入n - 1个字符串,改成cin >> s;即可解决这个问题

为什么会这样?

原因链接:https://blog.csdn.net/u011421608/article/details/44591579

原因用户输入完年龄后按回车结束输入,把“ ”留在了输入流里,而cin不会主动删除输入流内的换行符,这样换行符就被getline读取到,getline遇到换行符返回,因此程序不会等待用户输入。

解决办法:把scanf改成cin,在cin后与getline()之间写一句cin.ignore()来忽略换行符

 
原文地址:https://www.cnblogs.com/theSunAndSnow/p/11736061.html