关于两次使用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);
        }
        ……
        }

2个回答

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

RaspberryMonster
cyannnn 谢谢哈!
接近 4 年之前 回复

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

RaspberryMonster
cyannnn 谢谢~
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于两次输入getline的困惑
[code=c]#include rn#include rnusing namespace std;rnrnint main()rnrn char name[10];rn cin.getline(name, 5);rn cout<<"name = "<
关于getline的输入问题?
std::string a ;rn std::getline(std::cin,a,'\n');rn std::cout<
一次输入两次数据
代码如下 :rn protected void Page_Load(object sender, EventArgs e)rn rn rn protected void Button1_Click(object sender, EventArgs e)rn rn SqlConnection conn = new SqlConnection();rn conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;rn SqlCommand myCommand = new SqlCommand("a1", conn); //a1存储过程名rn DataSet MyDataSet = new DataSet();rn myCommand.CommandType = CommandType.StoredProcedure;rn myCommand.Parameters.Add("@a", SqlDbType.Int);rn myCommand.Parameters["@a"].Value = a.Text; //输入控件arn myCommand.Parameters.Add("@b", SqlDbType.Int);rn myCommand.Parameters["@b"].Value = b.Text; //brn conn.Open();rn myCommand.ExecuteNonQuery();rn SqlDataAdapter Da = new SqlDataAdapter();rn Da.SelectCommand = myCommand;rn if (MyDataSet != null)rn rn Da.Fill(MyDataSet, "a"); //表arn rnrn GridView1.DataSource = MyDataSet;rn GridView1.DataBind(); rn conn.Close();rn rn rn问题是,当输入一个数据时候,如a=111,b=222 ,并按确定按钮后,GridView1里面却插入两次数据111,222 ;111,222 ,请问这是怎么回事来的??
关于getline的使用问题。
#include "windows.h"rn#include rn#include rn#include rn#include rnrnusing namespace std;rnrnvoid main()rnrn wstring fileNameStr;rn WIN32_FIND_DATA findFileData;rn HANDLE hFind;rn TCHAR *pathName = L"C:\\Documents and Settings\\xglu\\桌面\\16\\*.*";rn hFind = FindFirstFile(pathName, &findFileData);rn ifstream inputFile;rnrn int i = 0;rn while (FindNextFile(hFind, &findFileData))rn rn if(0 != i)rn rn wstring fileName = findFileData.cFileName;rn inputFile.open(fileName.c_str());rn wcout << fileName << endl;rn string str;rn while(getline(inputFile, str))//这里我想让他循环读取所有文件中的内容。可是他把第一个文件中的内容读取完以后就不再读其他的文件了。为什么???rn rn cout << str << endl;rn rn inputFile.close();rn rn rn i++;rn rn rn FindClose(hFind);rn system("pause");rnrnrn在这个程序中。我想循环读取一个文件夹下的所有文件,然后讲文件名和文件中的所有内容都显示出来。可是它只显示一个文件的内容以后就不再读取其他文件的内容了。其他文件都只显示文件名,不显示内容了。而如果将while(getline(inputFile, str))改为getline(inputFile, str)就可以顺利执行,也就是每个文件只读取第一行。
getline函数输入要击两次回车的解决办法
这个getline函数输入要击两次回车的解决办法不错..有点实用
getline输入问题。
[code=c]rn#include rn#include rn#include rnusing namespace std;rnrnint main()rnrn int dp[1001][1001];rn string s;rn getline(cin,s);rn string t = s;rn reverse(t.begin(), t.end());rn rn int n = s.length(), m = t.length();rn for (int i = 0; i
openDataOutputStream只能使用一次问题
while(true) rnDataOutputStream dos = conn.openDataOutputStream(); rndos.writeUTF("Hello World"); rndos.close(); rn rn这段代码中,循环执行第一次时可以的;但要执行第2次时,会在openDataOutputStream()出现异常,wtk上显示“no more output stream”rn请问应该如何解决。rn不是说Socket是持久连接的吗?如果我需要在这个Socket上面在一定时间内保持数据的流动,那我怎么设计这个输入输出流?
C++关于getline的使用问题
[code=c]#include rn#include rnusing namespace std;rnrnint main()rn string str;rn while( getline(cin,str) )rn rnrn cout<<"---"<
关于getline()函数的使用问题?
关于getline()函数的使用问题?rnrnrn char t[60];rn char a[60];rn double p;rn rn cout << "Please input the title of the book: ";rn cin.getline(t, sizeof(t)); /////////////////////////////////////在运行时,这句没执行而第二句cin.getline(a, sizeof(a));却执行了。rn cout << endl;rn rn cout << "Please input the author of the book: ";rn cin.getline(a, sizeof(a)); rn cout << endl;
关于行输入以及getline
我想将用户的输入直接存储到string对象中,使用以下函数:rnstring UserInput;rngetline(cin,UserInput);rnrn但当运行时,每次用户输入一行后,都要再输入一行并回车才能接收,并且接收的是用户输入的第一行。rn请问是什么原因?rnrn全部代码如下:rnrn#include rn#include rnusing namespace std;rnrnint main(int argc, char* argv[])rnrn string UserInput;rn getline(cin, UserInput, '\n');rnrn cout << UserInput << endl;rn return 0;rn
关于getline输入的一个小问题
今天做OJ的时候,遇到连续输入一行和接着输入单个字符的情况,然而第二次循环的时候却会出问题,大概分析了下,应该是缓冲区出问题了。所以加上 char s; string str; while (getline(cin, str)) { cin >> s; cout << str.c_str()<<" "<<s<<endl; cin.ignore(); } 则不会错误.随手记
电脑启动,两次只能成功一次?
电脑关闭电源后启动,每两次只能启动一次,另一次主机会亮,但显示器没有信号rnrn换过电源,没有用,重新插过显卡,内存,cpu 也没用rnrn谁能告诉我是什么原因?rnrn还有每次登陆csdn 总有一个两周内不用登陆的选项,好象不起作用啊!
怎么样在TEXT1.TEXT只能输入一次“.”
怎么样在TEXT1.TEXT只能输入一次“.”rn其他的“.”不要rn比如5...3 5.35.35rn只能是5.3 5.3535
ios input框只能输入一次的问题
苹果手机 固定定位的元素 在元素内 input 框聚焦的时候 弹出的软键盘占位 失去焦点的时候软键盘消失 但是还是占位的 导致input框不能再次输入 在失去焦点的时候给一个事件 blur() { setTimeout(() =&gt; { const scrollHeight = document.documentElement.scrollTop || document.body.scro...
关于getline函数以及输入终止的问题
就是以下的程序,包含两部分,第一部分是while(cin>>word)那段,用户可以输入任意多的字符串,直到不想输入为止(此时按Ctrl+Z);第二部分是while(getline(cin, line))那部分,用户可以输入任意多行字符,每次换行程序就会把上一行的字符输出一遍,直到不想再输入为止(此时按Ctrl+Z)。两部分单独编译的时候都没问题,但是合在一起的时候,第二部分就被无视掉了(但是前面的提示语还留着)。请问这个是怎么回事呢?我百思不得其解啊!求各位大神帮帮忙!rnrn[code=c]rn//rn#include rn#include rnrnusing std::string;rnusing std::cin;rnusing std::cout;rnusing std::endl;rnrnvoid keep_window_open();rnrnint main()rnrn string word;rn // read until end-of-file, writing each word to a new linern cout<<"\nNow you can input as many words as you can. If you want to terminate, you may press Ctrl+z:\n";rn while (cin >> word)rn cout << word << endl;rnrn string line;rn // read line at time until end-of-filern cout<<"\nNow you can input as many lines of words as you wish. To terminate, please press Ctrl+z:\n";rn while (getline(cin, line))rn cout << line << endl;rnrn keep_window_open();rnrnrnvoid keep_window_open()rnrn cout << "\nPress any key to exit:";rn getchar();rnrn[/code]rn
getline两次调用输出不正常
#includernint main()rnrn using namespace std;rn const int Artsize=20;rn char name[Artsize];rn char dessert[Artsize];rnrn cout<<"Enter your name: \n";rn //cin.getline(name,Artsize);rn cout<<"Enter your favorite dessert: \n";rn cin.getline(dessert,Artsize);rn cout<<"I have some delicious "<
有关getline输入空格的问题
//while.cpp--introducing the while looprn#includernconst int Arsize=20;rnint main()rn rn using namespace std;rn char name[Arsize];rn cout<<"Your first name,please: ";rn cin.getline(name,20);rn cout<<"Here is your name,verticallized and ASCIIized:\n";rn int i=0;rn while(name[i]!='\0')rn rn cout<>则碰到空格时会跳出,这是为什么?
getline用了之后输入的问题。
#include rn#include rn#include rnusing namespace std;rnrnvoid change(string & str);rnrnint main()rnrn cout<<"Enter a string (q to quit): ";rn string input;rn getline(cin,input);rn while(input!="q" && input!="Q")rn rn change(input);rn cout<
翻转句子,记一次getline函数的使用
字符串处理
关于套接字只能使用一次的错误原因
我的程序退出时使用closesocket关闭了套接字,然后重新运行,连接同一个地址和端口就报告这个错误,必须要等一段时间在重新运行才正常,即使用127.0.0.1地址。不知原因。谁能解释一下啊?
关于getline()函数跳过了一次输入数据
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。rnrn这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200rn岁的生日和未出生的生日都是不合理的,应该被过滤掉。rnrn输入描述:rn输入在第一行给出正整数N,取值在(0, 105];随后N行,每行给出1个人的姓名(由不超过5个英文字母组成的字符串)、以及rn按“yyyy/mm/dd”(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。rnrnrn输出描述:rn在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。rnrn输入例子:rn5rnJohn 2001/05/12rnTom 1814/09/06rnAnn 2121/01/30rnJames 1814/09/05rnSteve 1967/11/20rnrn输出例子:rn3 Tom Johnrnrnrnrn我的前半部分读入数据的代码如下,问题描述在代码的注释中rnrnrn#include rn#includern#includernrnusing namespace std;rnrnint main() rnrn int N;rn cin >> N;rn vector vec;rn //读入N次数据rn while (N--)rn rn string s;rn //问题出在这里,第一次会跳过输入,循环到下一次的时候才会正常读入数据rn //这就导致了vec中第一个元素是个空字符串,我不知道是为什么,是getline没用对吗?rn getline(cin, s);rn vec.push_back(s);rnrn rnrn for (auto s : vec) cout << s << endl;rn rn vector vec_time;rn for (auto s : vec)rn rn string s1 = "";rn for (auto c : s)rn rn cout<<"here"<
getline输入的字符串长度???
请问哪位知道,怎么知道getline输入的长度
关于getline函数的问题?
#include rn#include // make string class availablern#include // C-style string libraryrnint main()rnrn using namespace std;rn char charr[20]; rn string str;rnrn cout << "Length of string in charr before input: " rn << strlen(charr) << endl;rn cout << "Length of string in str before input: "rn << str.size() << endl;rn cout << "Enter a line of text:\n";rn cin.getline(charr, 20); // indicate maximum length rn cout << "You entered: " << charr << endl;rn cout << "Enter another line of text:\n";rn getline(cin, str); // cin now an argument; no length specifierrn cout << "You entered: " << str << endl;rn cout << "Length of string in charr after input: " rn << strlen(charr) << endl;rn cout << "Length of string in str after input: "rn << str.size() << endl;rnrn return 0; rnrnrnrnrn为什么输出会显示为如下结果,有谁能解释吗?rnLength of string in charr before input: 23rnLength of string in str before input: 0rnEnter a line of text:rnhellornYou entered: hellornEnter another line of text:rnwhar's your namernherernYou entered: whar's your namernLength of string in charr after input: 5rnLength of string in str after input: 16rnrn为什么运行getline(cin, str);的时候,要输入两行并且显示出来的是第一行的内容??有谁能帮我解释一下吗?
关于getline()的问题
int n;rn int num;rn char w[100];rn cin>>n;rn for(int c=1;c<=n;c++)rn rn rnrn cin>>num;rn [color=#FF0000]char (*str)[50]=new char[num][50];rnrn cin.seekg(0,ios::cur);rn for(int i=0;i
关于 getline 的问题
我用 rnstring name;rngetline(cin, name);rnrn新建一个新的工程测试可以正常输入一行给 name,可是在我的某一个工程中加入这个代码后getline根本没提示让输入字符就执行下一句,导致name是空的,没写入。这是为什么呢?可能是什么原因?我知道C中scanf可能是缓存没刷新,需要fflush之类的操作,可是这时候 cin.clear() 也不行啊
一个关于getline的问题
有一小程序:rn#includern#includernusing namespace std;rnint main()rnrnstring line,word;rnwhile(getline(cin,line))rncout<
关于getline()的一个问题
using namespace std;rn struct pizzarn rn char company[Asize];rn float diameter;rn float weight;rn ;rn pizza *pie=new pizza;rn cout<<"What's the diameter of pizza:";rn cin>>pie->diameter;rn [color=#FF0000]cin.get();//后面是getline()输入时候,为什么要加这一步[/color]rn cout<<"What's the name of pizza company:";rn cin.getline(pie->company,Asize);rn cout<<"What's the weight of pizza:";rn cin>>pie->weight;rn cout<<"company:"<company<diameter<<"inches"<weight<<"ounches"<
一道关于getline的问题
#includern#includernusing namespace std;rnint main()rnrn string acronym,fullname,tmp;rn cout<<"enter acronym: ";rn cin>>acronym;rn cout<<"enter full_name: ";rn getline(cin,fullname); rn cout<<"acronym \""<>tmp)rn fullname+=tmp;rn这时我输入完fullname之后回车没有反应了rn请大神们帮我看看问题出在哪里了
一个关于getline得问题
#include rn#include rnrnusing namespace std;rnrnint main()rnrn string aa;rn getline(cin,aa);rn cout << aa;rn return 0;rnrnrn执行这个程序,当输入完aa后,要按两次回车才能看见aa的输出,为什么?
关于getline()和cin的问题
#include rn#includernusing namespace std; rnint main() rn rnstring name;rncout<<"please enter your full name ";rncin>>name;rncout<<"\n yourname is"<>name 改为getline(cin,name)为什么调试运行的时候 会不一样 后面那个输入名字后要点两次回车
关于getline的一点问题
请问这段代码中flag和record的作用是什么??while (getline(indata, record))这个是什么意思?还有record的值是从哪里来的?rnrnvoid msg::show_all()rnrn ifstream indata("pbook.txt",ios::in);rn if(!indata)rn rn cerr<<"open error!"<
关于getline函数的问题
今天做了一道c++ primer上的习题,代码如下:rn[code=c] rn string fileName;rn cout << "Input the file's name: ";rn cin >> fileName;rnrn ifstream inFile(fileName.c_str());rn if (!inFile) rn cout << "Error! Cannot open the file." << endl;rn return -1;rn rnrn vector svec;rn string input;rn while (inFile) rn getline(inFile, input);rn svec.push_back(input);rn rn inFile.close();rnrn istringstream iss;rn for (vector::const_iterator iter = svec.begin(); iter != svec.end(); ++iter) rnrn iss.str(*iter);rn string input;rn while (iss >> input) rn cout << input << ' ';rn rn cout << endl;rn iss.clear();rn rn[/code]rnrn突然想到一个问题,如果文件中有一行空白行,也就是说以换行符为一行,这时用getline函数是不是拿到了空字符串?如果是的话,下面的 iss >> input 是不是把空字符串赋给了input?求解答!
关于std::getline的问题!
bcb6 下调试通过。。。。vc提示错误!!!!!!!!!!!!!111rnrn#include rn#include rn#include rn#include rnrnrnint main(int argc, char* argv[])rnrn ifstream input;rn input.open("1.txt");rn std::string str;rn std::vector readBuf;rn while(!input.eof())rn rn std::getline(input, str);rn cout << str.c_str() << endl;rn readBuf.push_back(str);rn cin.get();rn rnrn return 0;rnrnrnE:\test\temp\d\d.cpp(19) : error C2780: 'class std::basic_istream<_E,_Tr> &__cdecl std::getline(class std::basic_istream<_E,_Tr> &,class std::basic_string<_E,_Tr,_A> &,const _E)' : expects 3 arguments - 2 providedrn c:\program files\microsoft visual studio\vc98\include\string(149) : see declaration of 'getline'rnE:\test\temp\d\d.cpp(19) : error C2784: 'class std::basic_istream<_E,_Tr> &__cdecl std::getline(class std::basic_istream<_E,_Tr> &,class std::basic_string<_E,_Tr,_A> &)' : could not deduce template argument for 'class std::basic_istream<_E,_Tr> &' frnrom 'class ifstream'rnE:\test\temp\d\d.cpp(19) : error C2784: 'class std::basic_istream<_E,_Tr> &__cdecl std::getline(class std::basic_istream<_E,_Tr> &,class std::basic_string<_E,_Tr,_A> &)' : could not deduce template argument for 'class std::basic_istream<_E,_Tr> &' frnrom 'class ifstream'rnE:\test\temp\d\d.cpp(19) : error C2784: 'class std::basic_istream<_E,_Tr> &__cdecl std::getline(class std::basic_istream<_E,_Tr> &,class std::basic_string<_E,_Tr,_A> &)' : could not deduce template argument for 'class std::basic_istream<_E,_Tr> &' frnrom 'class ifstream'
为什么getline无法输入?
#pragma warning(disable:4786)rn#includern#includern#includernusing namespace std;rnint main()rnrn map dic;rn string s1,s2;rn while(cin>>s1>>s2)rn dic[s1]=s2;rnrn//above:complete dictionaryrnrn string x;rn cin.sync(); rn cout<<"please input tranformed sentence...."<
关于getline和cin的问题
#includern#includernusing namespace std;rnrnint main()rnrn string line;rn while(getline(cin,line))rn cout<rn#includernusing namespace std;rnrnint main()rnrnrn string word;rn while(cin>>word)rn cout<
关于getline的问题
[code=C/C++]rn#include rn#include rnusing namespace std;rnstring s;rnvoid main()rnrn rn string line;rn while(getline(cin,line) )rn cout<<"输出"<
关于getline 的问题
#include rn #includern #include rn using namespace std;rn int main ()rn rn string str[100];rn int n;rn cin >> n;rn int i;rn for( i = 0; i < n; i++ )rn getline( cin, str[i]);rn for( i = 0; i < n; i++ )rn rn cout << str[i] << '\n';rn rn system ( "pause" );rn return 0; rn rn 我输入n = 3;rn 然后准备输入3个带空格的字符串rn 结果输入两个字符串时rn 就输出了3个字符串,其中第一个是空串!!rn 为什么会出现这种情况?rn 谢谢! rn
关于getline的一个问题
t3.cpp:rn#include rn#include rnusing namespace std;rnmain()rnrn int i;rn string M;rn getline(cin,M,i,i);rn cout << "M=" << M << endl;rnrn使用gcc编译,命令:g++ -g t3.cpp -o t3rn结果是:t3.cpp:8: invalid conversion from 'void*' to 'char**'rn t3.cpp:8: cannot convert 'std::string' to 'size_t*' forrn argument '2' to '__ssize_t getline(char**,size_t*,FILE*)'rn编译失败.想问一下是为什么?rnrn
getline的使用
 getline是在以输入方式打开文件(ifstream)时所使用的函数Time:2015.03.11
菜鸟求教!!!!关于getline使用
本人大菜鸟,问个问题rn想输入一系列词组,之间用回车隔开,将词组存入string数组里 怎么搞啊rnstring pswords[100];//定义一个string数组,将输入的词组储存在其中rnint index=0;rnwhile(getline(in,pswords[index]))rn index++;rnrnrnrn我的代码 不对。。。。。rn求指导啊
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数