谁能告诉我这是怎么了?没有cin.ignore,getline将无法工作,并且在我第一次再次调用该函数之后,第一个字符将被删除。到目前为止,我已经尝试使用stringstream而不是getline,cin.sync(),cin.clear(),但是似乎没有任何效果。另外,我使用getline的原因是,由于某些街道之间存在间隔,因此在这种情况下,仅使用cin不能正常工作
std::cout << "Enter Street Name 1: " ;
std::cin.ignore(1,EOF);
std::getline(std::cin,s1);
std::cout << "Enter Street Name 2: " ;
std::getline(std::cin,s2);
std::cout<<"Your first street was: "<<s1<<" Your second street was: "<<s2 <<". Please look at the map to find the intersection of " << s1 << " and " << s2 <<std::endl;
输出
Enter Street Name 1: Bloor
Enter Street Name 2: Yonge
Your first street was: Bloor Your second street was: Yonge. Please look at the map to find the intersection of Bloor and Yonge
Enter Street Name 1: Bloor
Enter Street Name 2: Yonge
Your first street was: loor Your second street was: Yonge. Please look at the map to find the intersection of loor and Yonge
Enter Street Name 1: Bloor
Enter Street Name 2: Uong
Your first street was: loor Your second street was: Uong. Please look at the map to find the intersection of loor and Uong
答案 0 :(得分:1)
如果没有
cin.ignore
,则getline
将不起作用,
只有在此之前有一些代码在输入流中留下换行符时,这才是正确的。
,当我第一次再次调用该函数后,第一个字符被删除。
这很有道理。 cin.ignore()
读取并丢弃一个字符。
如果没有Minimal, Complete, and Verifiable Example,我将无法提出解决您问题的建议。
答案 1 :(得分:0)
因为使用不带参数的cin.ignore()意味着忽略缓冲区中的下一个字符,这就是删除第一个字符的原因。要使用cin.ignore()
cin.ignore(int nCount = 1,int delim = EOF);
参数
nCount-要提取的最大字符数。
delim-分隔符(默认为EOF)。
示例
std::cin.ignore(256,' ');
//忽略直到空格