c++ - cin.ignore 和 cin.sync 的区别

标签 c++ iostream

cin.ignorecin.sync 有什么区别?

最佳答案

cin.ignore 丢弃字符,直到达到指定的数量,或直到到达分隔符(如果包括)。如果您不带参数调用它,它会丢弃输入缓冲区中的一个字符。

例如,cin.ignore (80, '\n') 将忽略 80 个字符,或者忽略它找到的所有字符,直到遇到换行为止。

cin.sync 丢弃输入缓冲区中的所有未读字符。但是,不能保证在每个实现中都这样做。因此,如果您想要一致性,ignore 是更好的选择。

cin.sync() 只会清除剩下的内容。我能想到的 sync() 唯一不能用 ignore 完成的用途是 system ("PAUSE");:

cin.sync(); //discard unread characters (0 if none)
cin.get(); //wait for input

对于 cin.ignore()cin.get(),这可能有点混合:

cin.ignore (std::numeric_limits<std::streamsize>::max(),'\n'); //wait for newline
//cin.get()

如果剩下一个换行符,只需输入 ignore 似乎就会跳过它。但是,如果没有换行符,将两者都放置将等待两个输入。丢弃任何未读取的内容可以解决该问题,但同样是不一致的。

关于c++ - cin.ignore 和 cin.sync 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10585392/

相关文章:

c++ - 在 C++ 中运行 CMD 行使用变量(不是字符串文字)作为参数

c++ - 继承单例

c++ - 如何将变量分配给 ASCII 文件中的项目并在 C++ 中计算它们?

模板类上的 C++ 运算符重载

c++ - MFC 功能区主页按钮双击关闭应用程序

C++ 在 cin 时忽略特定字符

c - 如何在C中模拟程序的键盘输入

php - C++:提高ifstream二进制文件读取速度

c++ - 交替的 cin/cout 很慢?

c++ - 将 stringstream 换成 cout