码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-25 10:20:28      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:scanf   names   原因   返回   get   getline   style   之间   结束   

 
 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()来忽略换行符

 

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

标签:scanf   names   原因   返回   get   getline   style   之间   结束   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!