12

cin.ignore和 和有什么不一样cin.sync

4

1 回答 1

17

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()and cin.get(),这可能有点混合:

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

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

于 2012-05-14T14:34:28.130 回答