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
原因用户输入完年龄后按回车结束输入,把“\n”留在了输入流里,而cin不会主动删除输入流内的换行符,这样换行符就被getline读取到,getline遇到换行符返回,因此程序不会等待用户输入。
解决办法:把scanf改成cin,在cin后与getline()之间写一句cin.ignore()来忽略换行符
原文地址:https://www.cnblogs.com/theSunAndSnow/p/11736061.html
时间: 2024-10-12 06:32:26