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

C++ cin.ignore在第二次调用函数时删除第一个字符,c++,C++,谁能告诉我这有什么问题吗?如果没有cin.ignore,getline将无法工作,在我第一次再次调用该函数后,第一个字符将被删除。到目前为止,我已经尝试使用stringstream而不是getline、cin.sync()、cin.clear(),但似乎没有任何效果。我之所以使用getline,也是因为有些街道之间有空间,所以在这种情况下,简单地使用cin是不起作用的 std::cout << "Enter Street Name 1: " ; std::cin.ignore(1,

谁能告诉我这有什么问题吗?如果没有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;
因为使用cin.ignore()时没有参数,这意味着忽略缓冲区中的下一个字符,这就是删除第一个字符的原因。使用cin.ignore()的步骤

cin.ignore(int nCount=1,int delim=EOF)

参数

nCount—要提取的最大字符数

delim-分隔符字符(默认为EOF)

范例
std::cin.ignore(256')//忽略直到空格

如果没有
cin.ignore
,则
getline
将无法工作

只有在之前有一些代码在输入流中留下换行符时,这才是正确的

在我第一次再次调用函数后,第一个字符被删除

这是有道理的
cin.ignore()
读取并丢弃一个字符


我无法建议一些可以解决您的问题的方法,如果没有解决方法。

欢迎使用堆栈溢出。请花点时间浏览,并参考中关于您可以在此处询问什么和如何提问的材料。特别重要的是,请不要发布代码图片的链接。在此处发布代码。将其更改为代码一般经验法则:如果必须
忽略
忽略
,则在操作后必须忽略流中的数据。如果你
ignore
在将来的离线操作之前,有可能必须忽略数据,那么该程序很可能会
忽略你不希望忽略的内容。我尝试过做std::cin.ignore(1,EOF),但仍然不起作用尝试在getline之后使用cin.ignore不必再进行修改,然后第二个getline将无法工作,并且输出完全混乱。