由于我发现fflush(stdin)
不是一种可移植的方式来处理熟悉的“换行符潜伏在输入缓冲区中”的问题,所以当我不得不使用时,我一直在使用以下方法scanf
:
while((c = getchar()) != '\n' && c != EOF);
但是今天我偶然发现了我从cplusplus.com 在 fflush 上注意到的这条线:
fflush()...在为更新而打开的文件中(即,为读取和写入而打开),应在执行输入操作之前在输出操作之后刷新流。这可以通过重新定位(fseek、fsetpos、rewind)或显式调用 fflush 来完成
事实上,我之前已经读过很多次了。所以我想确认我是否可以在 之前简单地使用以下任何一个来实现与支持时scanf()
相同的目的:fflush(stdin)
fseek(stdin,1,SEEK_SET);
rewind(stdin);
PS rewind(stdin)
似乎很安全并且可以刷新缓冲区,我错了吗?
fseek(stdin,0,SEEK_SET)
如果我们正在谈论,我应该提到的错误stdin
,因为在这种情况下我们不能使用 0 或返回的偏移量以外的任何偏移量ftell()
。