我的代码非常简单,但我认为最好弄清楚我的程序中发生了什么。 由于某种原因,我似乎无法让
ungetc()
正常工作,也无法弄清楚它的用途。 通常,ungetc()
应该将一个字符返回到流中,或者至少我认为应该如此。 例如,如果我输入 ABC,通过 getchar()
获取三个字符,我希望 ungetc()
返回 getchar()
已返回的字母之一。 如果我稍后调用 putchar()
,我会期望返回 B,因为 C 被扔回流中,但 C 被返回。 我尝试了 getchar()
和 getc()
并遇到了同样的问题。
精简版本,我在程序中输入“ABC”,期望
ungetc()
导致putc()
返回“B”,但我得到的只是C。 为什么会出现这种情况?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char c;
c=getchar();
c=getchar();
c=getchar();
ungetc(c, stdout);
putchar(c);
}
c
的类型应该是int
而不是char
以匹配所使用的函数。如果不使用它们,则为 c
赋值是没有意义的。 也就是说,您可以完全消除变量(无点样式)。c
推到 stdin
而不是 stdout
。getchar()
之后调用 ungetc()
来演示感兴趣的属性,否则您只需打印之前读取的值。#include <stdio.h>
int main(void) {
getchar();
getchar();
ungetc(getchar(), stdin);
putchar(getchar());
}
和示例运行:
ABC
C