c - 在C中,是否可以从getchar的当前缓冲区位置读取字符而不移动缓冲区的指针?

标签 c buffer stdin getchar

我有一个文件在我的程序中作为标准输入传递。一个非常大的循环的每次迭代,方法“get_next”都会调用 getchar,并获取 stdin 中的下一个字符并将其分配给名为 nchar 的变量。

问题是,我有一个实例,我必须查看当前 nchar 之后的 char,而不更改下一次调用 get_next 的操作。这意味着,我必须调用 getchar() 而不改变缓冲区的状态。

有办法做到这一点吗?是否有像“getcharStatic”这样的方法可以在不更改缓冲区的情况下返回下一个字符,就像堆栈的 peek 与 pop 一样?

或者,有没有一种方法可以使用 getchar 正常读取字符,然后将字符插入到我从中获取的位置,从而人为地保存缓冲区的状态?

我尝试谷歌搜索一段时间,我认为问题涉及过于模糊的术语和标签。感谢您的帮助!

最佳答案

您可以使用 ungetc() 将字符推回标准输入。这是 doc 的简介:

int ungetc( int ch, FILE *stream ); 

If ch does not equal EOF, pushes the character ch (reinterpreted as unsigned char) into the input buffer associated with the stream stream in such a manner that subsequent read operation from stream will retrieve that character.

关于c - 在C中,是否可以从getchar的当前缓冲区位置读取字符而不移动缓冲区的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939228/

相关文章:

c - POSIX 线程/信号 : Portable way to determine to which thread a signal was delivered?

c++ - 将缓冲区与另一个缓冲区连接

ruby - Ruby 中的 STDIN 和 $stdin 有什么区别?

Python subprocess.Popen 文件中的 stdin,将内容更改为流

c - 头文件和多个c程序

c - C语言如何获取字符串的第一个字符

c - 为什么 C 被用作操作系统的主要编程语言?

vim - "a modified hidden buffer"是什么?我可以禁用这个东西吗?

Python(PyCharm) Selenium 跳过行代码

string - Golang 中的 Scanln 不接受空格