Ungetc() 不取消获取字符

问题描述 投票:0回答:1

我的代码非常简单,但我认为最好弄清楚我的程序中发生了什么。 由于某种原因,我似乎无法让

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 input output getchar ungetc
1个回答
0
投票
  1. 删除了两个未使用的标头。
  2. 变量
    c
    的类型应该是
    int
    而不是
    char
    以匹配所使用的函数。如果不使用它们,则为
    c
    赋值是没有意义的。 也就是说,您可以完全消除变量(无点样式)。
  3. 程序出现段错误,因为它应该将
    c
    推到
    stdin
    而不是
    stdout
  4. getchar()
    之后调用
    ungetc()
    来演示感兴趣的属性,否则您只需打印之前读取的值。
#include <stdio.h>

int main(void) {
    getchar();
    getchar();
    ungetc(getchar(), stdin);
    putchar(getchar());
}

和示例运行:

ABC
C
© www.soinside.com 2019 - 2024. All rights reserved.