2 xjznq2010 xjznq2010 于 2014.11.20 23:12 提问

回退字符(ungetc)如何回退多个字符

书上只举了回退一个字符的例子,
另外,“如果回退多个字符,字符数不得超过已读取的个数。”是指什么意思。
如果回退多个字符的话,那么函数的返回值int是什么?

2个回答

save4me
save4me   Ds   Rxr 2014.11.21 10:29
已采纳

参考
ungetc
ungetc函数

注意点:
ungetc 不能连续多次调用。两次 ungetc 调用之间必须至少有一次读操作或者文件指针移动操作(fseek,rewind 等 ) , ungetc 只影响输入流,而不影响与输入流关联的外存文件。对于以二进制方式打开的流,ungetc 会使读指针减 1 ,如果当前位置为 0 ,则减 1 后结果 无法预测。紧跟在fscanf 后面的 ungetc 也可能会失败,因为 fscanf 中就用到了 ungetc。

Some library implementations may support this function to be called multiple times, making the characters available in the reverse order in which they were put back. Although this behavior has no standard portability guarantees, and further calls may simply fail after any number of calls beyond the first.

虽然有些类库会支持多次调用这个函数,但是如果代码移植的时候,可能不能保证都能执行成功
退回的是已读取到的字符,所以退回的字符数不能超过已经读取的。就像你去银行取了100块钱,你要再存进去,只能小于等于100块。
在标准函数库里面,只能退回一个字符,成功后返回的是退回的字符,如果你的类库支持退回多个,那你需要查看一下你的类库的说明文档。

xjznq2010
xjznq2010 谢谢~
接近 3 年之前 回复
turingo
turingo   Rxr 2014.11.25 17:31

你想准确回退多个字符的话,建议用fseek来移动文件指针。

Csdn user default icon
上传中...
上传图片
插入图片