C++ cin.ignore和cin.sync之间的区别

C++ cin.ignore和cin.sync之间的区别,c++,iostream,C++,Iostream,cin.ignore和cin.sync之间有什么区别?cin.ignore丢弃字符,直到达到指定的数字或分隔符(如果包含)。如果不带参数调用它,它将从输入缓冲区中丢弃一个字符 例如,cin.ignore(80,'\n')将忽略80个字符,或者忽略它找到的字符数,直到它遇到换行符为止 cin.sync丢弃输入缓冲区中的所有未读字符。但是,并不能保证在每个实现中都这样做。因此,如果您想要一致性,ignore是一个更好的选择 cin.sync()只会清除剩下的内容。我能想到的sync()唯一不能用ig

cin.ignore
cin.sync
之间有什么区别?

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

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

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

cin.sync()
只会清除剩下的内容。我能想到的
sync()
唯一不能用
ignore
完成的用法是用
系统(“暂停”)替换

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

cin.ignore (std::numeric_limits<std::streamsize>::max(),'\n'); //wait for newline
//cin.get()
cin.ignore(std::numeric_limits::max(),'\n')//等待新线
//得到

如果有一个换行符剩余,只要把
ignore
放进去就好像跳过了它。但是,如果没有换行符,则放置两个将等待两个输入。丢弃任何未读取的内容都可以解决该问题,但再次强调,这是不一致的。

您能告诉我cin.sync不安全的具体实现吗@5fox:我可以向您展示它不起作用的实现:应该在cin之前或之后调用ignore()?具体来说,当我第一次使用cin时,是否需要刷新缓冲区中不需要的数据(如果有)?或者,当输入main时,程序是否会刷新所有内容?但我注意到,如果我们调用ignore(),它会第一次等待一些非空白字符。@Rajesh,After。程序启动时,输入缓冲区中不应包含随机内容。这种情况的常见用例是清除用户输入的错误输入,或清除输入操作留下的换行符。@chris Thaks获取信息。为什么我下面的代码无法接受字符串?若输入了空字符串,我希望while循环向用户请求新字符串。代码不适用于空字符串或有效字符串。ignore()行看起来让我很困扰,如果我删除ignore(),事情就会正常。但我担心以后会不会有麻烦,因为我没有冲洗缓冲液。void getString(string&str){do{cout
cin.ignore (std::numeric_limits<std::streamsize>::max(),'\n'); //wait for newline
//cin.get()