cin.ignore在第二次调用函数时删除第一个字符

时间:2019-03-16 04:03:54

标签: c++

谁能告诉我这是怎么了?没有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

2 个答案:

答案 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,' '); //忽略直到空格