cin,scanf后使用getline() 函数的易错点
Posted thesunandsnow
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()来忽略换行符
以上是关于cin,scanf后使用getline() 函数的易错点的主要内容,如果未能解决你的问题,请参考以下文章
使用 `cin >> n;` 后使用 `getline(cin, s);`
cin.get() 和 cin.getline() 之间的区别