C++ Cin.Ignore()不起作用

C++ Cin.Ignore()不起作用,c++,cin,C++,Cin,这里我有一个代码: cout << "Press Enter To Exit..."; cin.ignore(); 此程序将执行并等待您按enter键,然后退出。 现在请参见以下代码: int m; cin >> m; cout << "Press Enter To Exit..."; cin.ignore(); 这一次,在输入保存在m中的数字后,程序将退出,而不等待cin.ignore命令,该命令将等待按enter键 我的意思是,如果在cin.ignor

这里我有一个代码:

cout << "Press Enter To Exit...";
cin.ignore();
此程序将执行并等待您按enter键,然后退出。 现在请参见以下代码:

int m;
cin >> m;
cout << "Press Enter To Exit...";
cin.ignore();
这一次,在输入保存在m中的数字后,程序将退出,而不等待cin.ignore命令,该命令将等待按enter键

我的意思是,如果在cin.ignore之前使用cin命令,那么cin.ignore命令将跳过。为什么?我该怎么做才能修好它呢?

用这个

std::cin.sync(); std::cin.get();
用这个

std::cin.sync(); std::cin.get();
使用

使用

当您使用cin>>m时,键入m的值,然后按enter键,enter“\n”进入缓冲区,cin.ignore;忽略它,程序结束。

当使用cin>>m时,键入m的值,然后按enter键,enter“\n”进入缓冲区,cin.ignore;忽略它,程序结束。

cin.ignore基本上会清除内存中的所有输入。在第一段代码中,您没有输入任何内容,因此它没有任何内容需要清除,因此它等待您输入一些内容。 在第二段代码中,您使用了>>运算符,该运算符获取格式化输入,但保留了在输入缓冲区中按ENTER键时存储的结束行字符“\n”。当你调用cin.ignore时,它会执行它的工作并清除相同的缓冲区。因为它已经执行了他被调用的操作,所以在本例中,它只允许程序继续执行到最后。记住cin.ignore是用来清除输入缓冲区的,如果你想让用户在程序继续运行之前输入一些东西,可以使用cin.get来保存输入

你也应该知道这一点:

如果使用:

->cingetlinecin,您的字符串将获得一整行输入,包括不应使用cin的结束行字符。忽略cin。忽略基本上会清除内存中的所有输入。在第一段代码中,您没有输入任何内容,因此它没有任何内容需要清除,因此它等待您输入一些内容。 在第二段代码中,您使用了>>运算符,该运算符获取格式化输入,但保留了在输入缓冲区中按ENTER键时存储的结束行字符“\n”。当你调用cin.ignore时,它会执行它的工作并清除相同的缓冲区。因为它已经执行了他被调用的操作,所以在本例中,它只允许程序继续执行到最后。记住cin.ignore是用来清除输入缓冲区的,如果你想让用户在程序继续运行之前输入一些东西,可以使用cin.get来保存输入

你也应该知道这一点:

如果使用:


->cingetlinecin,您的字符串会得到一整行输入,包括结束行字符。您也不应该使用cin。忽略

谢谢您的完整回复,您知道按enter键退出的更好方法吗?不知道。据我所知,cin.get是可用的最佳跨平台选项。不过我不是C++的。谢谢。我已经搜索并尝试了许多选择。这个答案消除了所有的困惑。感谢您的完整回复,您知道按enter键退出的更好方法吗?不知道。据我所知,cin.get是可用的最佳跨平台选项。不过我不是C++的。谢谢。我已经搜索并尝试了许多选择。这个答案消除了所有的困惑。谢谢你的回答,我可以简单地使用cin.ignore;如果输入缓冲区中没有任何内容,用户必须输入两个字符才能正常工作,而sync会清除所有剩余字符,然后读取,直到用户点击enter。谢谢你的回复,我可以简单地使用cin.ignore;如果输入缓冲区中没有任何内容,那么用户必须输入两个字符才能正常工作,而sync会清除所有剩余字符,然后读取,直到用户点击enter。。