关于两次使用getline()只能输入一次的问题

用了两次getline()函数 调试的时候发现第一次根本没有接受输入直接返回ming字串为“”
而第二次可以输入一行字串以回车结束 是为什么呢??

 while (cin >> choice){
        if (choice == 1){
            cout << "输入明文:\n";
            string ming;
            getline(cin, ming);
            cin.sync();
            cout << "输入密文:\n";
            string mi;
            cin.sync();
            getline(cin, mi);       
            string str = miyao(ming, mi);
            cout << "求出的密钥为:\n";
            printstr(str);
        }
        ……
        }
0

2个回答

cin >> choice之后还有一个回车在缓冲区中。

1
RaspberryMonster
cyannnn 谢谢哈!
3 年多之前 回复

楼上说的很对,可以试试cin.ignore()语句清空缓冲区

1
RaspberryMonster
cyannnn 谢谢~
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
getline 需要一次还是两次回车
---出现问题--- 一个getline和cin.geline这两个函数的区别: 这两个函数同时是存储一个句子,用getline函数时,当输入一个字符串时,要敲两下回车,这个语句才结束,而用cin.getline则不用: #include #include using namespace std; main () {          string name;      
C/C++中,写在while循环体的cin.getline()语句执行一次问题
#include #include #include using namespace std; int main() {     int count;     cin>>count;     string s;     string temp;     cin.ignore();     for(int i=0;i     {         getline
VC6.0 中 getline(cin, string) 需按两次回车解决方法,getiline输入时的用法
症状:  c++的标准库模板函数getline在读到限定符后还要读取额外字符...  解决方法:进入X:\Program Files\Microsoft Visual Studio\VC98\Include目录(VC6.0安装的地方),用记事本打开string(注意,不是string.h), 然后找到以下代码段.  else if (_Tr::eq((_E)_C,_D)) {_C
getline函数输入要击两次回车的解决办法
这个是出问题的程序#include #include int main(){     using namespace std;     string str;     std::cout    getline(cin,str);     std::cout}比如说,我们输入"virus welcome back!",但是当我们输入后按回车,程序并不运行cout语句,而是光标还在编绎窗口
getline 两次回车 解决办法
这个是出问题的程序: #include #include int main() {     using namespace std; string str; std::cout getline(cin,str); std::cout } 比如说,我们输入"virus welcome back!",但是当我们输入后按回车,程序并不
关于用Getline读取文件只能读取首行的问题
自己再代码中用getline读取文件时只能读取首行,这个问题困扰了我很久,最开始我以为是函数没有识别换行,任然再第一行读取东西,但这个行getline这个函数的基本功能就相悖了,在稍作测试后我就换了其他思路,转向其他方向。 void ReadMan(list &Gtm,char *filename) { ifstream ifile(filename,ios::in); if (ifile.
C++中使用cin之后再使用getline出问题的解决办法!
今天做OJ的时候,发现一个问题,就是我使用cin>>T;之后zai
getline()之前存在cin时的使用
cin.getline()用来读取一行数据,但是当cin.getline()前面进行了cin输入的话,cin.getline()会把进行cin输入时行末丢弃的换行符读入,从而造成cin.getline()第一次获得的数据为一空行,如下所示: int main() { int rep; cin >> rep; for (int i=0; i { cin.getline(str,25);
C++中的cin, cin.getline, getline等混合使用时不能输入直接执行下一行的问题
在学习C++时,经常会遇到一个问题,就是需要混合使用cin&amp;gt;&amp;gt;, cin.getline(), getline()时,有时会碰到不等你输入,就直接运行下一行的情况,如下面代码所示: // test.cpp: 定义控制台应用程序的入口点。 // #include &quot;stdafx.h&quot; #include &amp;lt;iostream&amp;gt; #include &amp;lt;cstring&amp;gt...
C++中getline()和cin同时使用时的注意事项
今天在做tju的oj,遇到一个问题,想前部分用cin函数一个一个的读入数据,中间部分利用getline()一起读入一行,但是测试发现,cin之后的getline函数并无作用,遂谷歌之。原来cin只是在缓存区中,把字符读走,会剩余/n在缓存区中,但是getline对/n极度敏感,导致getline刚开始读入便遇到/n于是停止读入数据。 例如一段代码: #include&amp;lt;iostream&amp;...
cin跟getline连用问题
cin&amp;gt;&amp;gt;与getline的工作方式,流提取运算符根据它后面的变量类型读取数据,从非空白符号开始,遇到Enter、Space、Tab键时结束。getline函数从istream中读取一行数据,当遇到“\n”时结束返回。 造成程序错误结果的原因是,用户输入完年龄后按回车结束输入,把“\n”留在了输入流里,而cin不会主动删除输入流内的换行符,这样换行符就被getline读取到,get...
关于scanf要写两次的问题
那是因为scanf("%d",&n);双引号里面有空格,把多余的空格删掉就可以正确输入了。
c++ getline正确读取多行内容
1.     Std::cin>> s 是无法读入换行和空格 2.     当前面的std::cin>>w;输入数字之后,数字存储在输入缓冲区,敲回车,输入的数字因为回车的原因传给了w,但是换行符仍然滞留在输入流了,接着就被下一句getline读取了 3.     cin.getline()不会把’\0’, ‘ ‘, ‘\n’等默认的分隔符写入到字符数组,因此如果在std::cin>>w后面紧
关于C++中getline()函数的一个陷阱
最近写代码的时候遇到一个问题,就是getline函数接受标准输入(键盘)时,失效了。请先看代码:#include<iostream> #include<vector> #include<string> using namespace std;int main() { cout<<"your age:"<<endl; int a; cin>>a; string str1
Cpp中使用getline读取一整行字符串
getline是在string头文件中定义的一个函数,以一个istream对象和一个string对象作为输入参数。该函数首先读取输入流的内容直到遇到换行符停止,然后将读入的数据存入string对象,最后返回istream对象。其中换行符读入但是不保留。 #include #include using namespace std; int main() { string buf;
cin>>和getline混用需谨慎
造成程序错误结果的原因是,用户输入完年龄后按回车结束输入,把“\n”留在了输入流里,而cin不会主动删除输入流内的换行符,这样换行符就被getline读取到,getline遇到换行符返回,因此程序不会等待用户输入。
VC++ 6.0中getline函数获取字符串居然要回车两次才起作用--微软的Bug
可以使用getline函数配合cin获取用户字符串输入到一个string变量,但必须回车两次才起作用,是微软的bug,在后续版本中已经修改,针对经典的VC++ 6.0,只能自己修改STRING文件了(Microsoft Visual Studio/VC98/Include/STRING)。修改方法如下: 1、查找到:             else if (_Tr::eq((_E
c++字符串整行输入问题(getline(),get())
首先定义4个字符类型的数组 const int max=20; char firstname[max], lastname[max], grade[max], age[max]; 录入信息后得到这样的结果: What is your first name? William Sherlock What is your last name?Homes What is your g
笔试算法题--股票买卖问题(两次买卖)
题目:一个人一天只能进行最多两次买和两次卖,并且只有卖了才能继续买。问一天可以获得的最大收益,要采用时间复杂度低的实现。 股票价格为:10,22,5,75,65,80.答案:87(10买,22卖,5买,80卖) 动态规划解决方法:设置数组dp[i][j]表示:prices[i]买入到prices[j]卖出的收益。则得出dp[i][j]为 0 12 -5 65 55 70   0 0 -
关于两次输入getline的困惑
[code=c]#include rn#include rnusing namespace std;rnrnint main()rnrn char name[10];rn cin.getline(name, 5);rn cout<<"name = "<
各种字符读取方法的比较(cin,getline等)
读取一个字符或一个字符串的方法有很多,也有些陷阱,下面总结一下。   (1)>>操作符 >>操作符的重载,有很多种原型,能够从输入流抽取各种形式的输入(int、单个字符、字符串等),也是我们最常用的一种读取字符的方式。它需要配合输入流对象使用(cin就是iostream类中的istream类对象静态成员),并且返回值是输入流的引用,所以能够有cin>>a>>b这样的写法。
C++ 使用getline读取一行字符串
刷一道水题的时候,看到了这个用法,因为喜欢C++风格,就没有用gets或者fgets来读取一行字符串。 这里介绍c++里面常用读取一行字符串的用法 getline()函数 getline(istream &in, string &s) 从输入流读入一行到string s •功能: –从输入流中读入字符,存到string变量 –直到出现以下情况为止: •读入了文件结
解决Request和Response只能获取一次的问题
的思路:创建两个容器类来装载Request/Response-&amp;gt;写一个过滤器Filter拦截请求将Info装载入容器中. 容器1: import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.longshine.luxicrmboot.commons.utils.ApplicationUtils; imp...
在cin后getline所遇到的问题
在cin后getline所遇到的问题 在C++中,使用cin读取数据后,再使用getline读字符串,就会遇到buffer没有清空的问题,具体如下 #include&amp;amp;amp;lt;iostream&amp;amp;amp;gt; #include&amp;amp;amp;lt;string&amp;amp;amp;gt; using namespace std; void main() { int value; cin &amp;amp;amp;gt;&amp;am
关于死循环中使用“scanf_s“反复输入一个变量的问题
#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;ctype.h&amp;gt; #include &amp;lt;time.h&amp;gt; using namespace std; void judge(int result); int main() { char gamer; // 玩家出拳 int compute...
文本框onkeyup,不重复执行
$(document).ready(function(){ var timer = null; $("#xxxx").on({     keyup: function(){         clearTimeout(timer);         timer = setTimeout(function(){             alert(1);         }, 1
c++用cin和getline实现输入回车结束输入
今天做一道测试题遇到了一个麻烦,我想要先读入一个字符串,再读入一个整数,循环往复,直到字符串是空,也就是说回车键结束循环。 最开始的想法是: string s;int d; while(cin>>s){ cin>>d; // precess } 但是,发现其实按enter键并不会结束,只有d的输入不是整数,才会结束。或者ctrl+Z, 查了下资料,原因是,cin>>s是有
键盘只能按一次解决方案
问题描述:中午休息爬桌子上,手可能多次碰到键盘,导致键盘发生问题:每个键只能按一次,例如我想删除一行句子,但是键盘只能响应一次。 在网上查了很久,有人说键盘坏了,有人说bois坏了,有人说主板坏了,各种奇葩。 最后解决方案:重置键盘筛选键: 控制面板---轻松使用----更改键盘的工作方式-----启用筛选键----应用(如果不熟悉的话,下面有图片教程) 图片教程如下:
getline输入n行遇到的问题记录
问题描述:输入n代表接下来输入n行字符串,例如下面所示; 5 [05:00 a.m.]: Server is started [05:00 a.m.]: Rescan initialized [01:13 p.m.]: Request processed [01:10 p.m.]: Request processed [11:40 p.m.]: Rescan completed 3 [09:00...
HttpServetRequest读取body只能一次的问题
HTTP请求中的是字符串数据: 1 //字符串读取 2 3 void charReader(HttpServletRequest request) { 4 BufferedReader br = request.getReader(); 5 String str, wholeStr = ""; 6 while((str = br.readLine(
C++中关于 getline() 读取缓冲区中回车,以及cin 结束符的问题
废话不多说直接上代码 #include &amp;lt;bits/stdc++.h&amp;gt; using namespace std; int main() { string str1; int x;cin&amp;gt;&amp;gt;x; while(x--){ getline(cin,str1); cout&amp;lt;&amp;lt;str1&amp;lt;&amp;lt;&quot;\n&quot;; ...
getline()忽略开头换行符
使用cin.clear()或cin.ignore()跳过最开始的终止符 例如 int main() {     string strline;     cin>>strline;     cout<<strline<<endl; cin.ignore(1);//忽略一个字符     getline(cin,strline);     cout<<strline<<endl;
c++中getline函数对换行符的处理
题目:https://blog.csdn.net/tigerisland45/article/details/51747138 C - 字符串统计 对于给定的一个字符串,统计其中数字字符出现的次数。 Input 输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。  Output  对于每个测试实例,输出该串中数值的个数...
getline()的使用详解
getline()的使用详解
string代替char数组的输入输出以及利用getline每次读取一行字符串
// practice4-2.cpp : 定义控制台应用程序的入口点。 //利用string代替char数组的输入输出 #include "stdafx.h" #include #include int _tmain(int argc, _TCHAR* argv[]) { using namespace std; string name; string dessert; cout<
解决cin.getline()未经输入就结束的问题
今天写程序,如下一段怎么也不能按预订想法运行:             char update[4][50] = {'\0'};             for (int j = 0; j employee[i].f_num; j++) {                 cout                 cin.getline(update[j], 50);
【C++编程基础】-读取字符、字符串的函数
iostream流:cin、cin.get()、cin.getline()       string流:getline() cin:配合输入操作符&quot;&amp;gt;&amp;gt;&quot;使用。而操作符&quot;&amp;gt;&amp;gt;&quot;默认会跳过空格、制表符、tab、回车符等分隔符,实际上这些空白分隔符都是存在于缓冲区中的。可以通过std::noskipws操纵符让输入操作符不跳过空白分隔符,std::skipws用来设置忽略空白...
关于a标签内的onclick事件只能点击一次的问题
关于a标签内的onclick事件只能点击一次的问题
ServletRequest中getReader()和getInputStream()只能调用一次的解决办法-续网友
本文的实现根据网友的文章-ServletRequest中getReader()和getInputStream()只能调用一次的解决办法 我做的是springmvc项目,项目经理提出需求:每一个请求都要记录放到日志的功能,记录的内容有IP地址、请求的路径、和访问的参数,并定期转移日志。 遇到的问题就是:ServletRequest的getReader()和getInputStream()两个方法
如何使用getline读入字符串(char)
也许是最近模拟题打多了的缘故,我发现自己渐渐变得比较毒瘤起来,当然这也是有一定的好处的,因为从中我也学到了一些处理字符串的正确姿势,今天我们就来讲一 讲如何用函数getline来读入一整行字符串进行处理。或者他的一些变体。 首先我们先需要知道为什么我们要学习这个函数,是这样的,相信大家都应该知道以前有一个函数叫做gets,这个函数非常的好用,你可以非常快捷的使用他来进行一整行字符串的输入,但是这...
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于大数据培训 关于云计算