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

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

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

 

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

时间: 2024-10-12 06:32:26

cin,scanf后使用getline() 函数的易错点的相关文章

C/C++中的getline函数总结:

来自:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html C/C++中的getline函数总结 getline函数是一个比较常见的函数.根据它的名字我们就可以知道这个函数是来完成读入一行数据的.现在对getline函数进行一个总结. 在标准C语言中,getline函数是不存在的.下面是一个简单的实现方式: int getline_(char s[],int lim){    int c,i;    i=0;    whi

关于js的易错知识

1 var arr = []; 2 for(var i = 0;i<2;i++){ 3 arr[i]=function(){ 4 console.log(i);//这里由于内部没有定义i,根据函数链它会往上一层寻找最近的作用域下的i 5 } 6 } 7 arr[0](); 8 arr[1](); 上述输出的都是2. 为什么呢?其实上述的操作是给aar数组添加了两个函数,所以自然可以用数组加下标和()执行函数. 易错点是人们常常以为第一个输出的是0,第二个函数输出的是1. 但是由于函数执行是自上而

string 类型的输入操作符 cin 和 getline 函数分别如何处理空白字符?

string用来读取一个word : string 类型的输入操作符 cin 对空白字符的处理:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直至再次遇到空白字符,读取终止(该空白字符仍留在输入流中). getline 函数用来读取整行文本,接受两个参数:一个输入流对象和一个 string 对象,例如 getline(cin,line): getline 函数对空白字符的处理:不忽略行开头的空白字符,读取字符直至遇到换行符,读取终止并丢弃换行符(换行符从输入流中去掉但并不存储在

[转]C++中cin、cin.get()、cin.getline()、getline()函数的简单总结

参考原文:http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html,另外做了一些修改~ 1.cin 2.cin.get() 3.cin.getline() 4.getline() 附:cin.ignore();cin.get()//跳过一个字符,例如不想要的回车,空格等字符 1.cin 用法1:最基本,也是最常用的用法,输入一个数字: #include <iostream> using namespace std; ma

getline()函数详解--转自黄昏飘雪的那夏

本文转自黄昏飘雪的那夏,原作者www.cnblogs.com/overcode 学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”.书上给的程序如下: int main() { string line: while(getline(cin,line)) cout<<line<<endl; return 0; } 大家会发现运行时怎么也跳不出循环,甚至会发生各种莫名其妙的错误.这是为什么

getline()函数的功能

getline函数的作用是从输入流中读取一行字符,其用法与带3个参数的get函数类似.即    cin.getline(字符数组(或字符指针), 字符个数n, 终止标志字符) [例13.7] 用getline函数读入一行字符. #include <iostream> using namespace std; int main( ) { char ch[20]; cout<<"enter a sentence:"<<endl; cin>>c

getline()函数

这是c++中 getline()的原型是istream& getline ( istream &is , string &str , char delim ); 其中 istream &is 表示一个输入流,譬如cin:string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以):char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入). 那么如果把get

sstream头文件-getline 函数 和 stringstream函数 和string的常见用法

#include <iostream> #include <string> #include <sstream> using namespace std; int main() { string line; while(getline(cin,line) { int sum = 0, x; stringstream ss(line); while(ss>>x) { sum += x; } cout << sum << endl; }

C++中getline函数的使用

代码: 1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 int main(){ 7 8 char* s; 9 s = new char[50]; //必须要分配空间 10 cin.getline(s,5); 11 int i = 0; 12 while(s[i] != '\0'){ 13 cout<<s[i]; 14 i++; 15 } 16 cout<<endl&