对ungetc将字符输入回stdin的一点理解

这里只讨论用ungetc将字符传入stdin时的情况

1.传回的字符是以压栈形式 后入先出

传入多个字符如'131',也是读取末尾的字符1

2.如果stdin没有字符 传回后会开启一个缓冲区 大小为1 必须在被getchar后才能下次ungetc 否则传入失败

但当stdin本来就有字符未读取完时 如getchar留有多个字符未被读取时 缓冲区大小将是getchar时输入的大小 这时候可以多次ungetc直到缓冲区被填满为止

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 答1: `ungetc(c, stdin)` 是一个函数,用于将一个字符 `c` 推到标准输入流 `stdin` 中。在读取字符时,我们可以使用 `getchar()` 函数来从标准输入流中读取字符。如果我们读取到了一个字符,但是后续的处理需要重新把这个字符到标准输入流中,这时就可以使用 `ungetc(c, stdin)` 函数。 例如,假设我们需要从标准输入流中读取一个字符,如果读取到的字符是数字,我们希望将其乘以 2,如果是字母,我们希望将其转换为大写字母。代码如下: ```c #include <stdio.h> #include <ctype.h> int main() { int c = getchar(); if (isdigit(c)) { c = (c - '0') * 2 + '0'; } else if (isalpha(c)) { c = toupper(c); } ungetc(c, stdin); return 0; } ``` 在上面的代码中,如果读取到的字符是数字,我们将其乘以 2,并将结果放到标准输入流中;如果是字母,我们将其转换为大写字母,并将结果放到标准输入流中。这样,在后续的代码中,我们就可以从标准输入流中继续读取字符了。 ### 答2: ungetc(c, stdin)是一个函数,用于将字符c放标准输入stdin中。它的作用是在读取输入时,将字符输入流中,以便后续的输入读取可以再次读取到这个字符。 通常情况下,在使用标准输入流(stdin)读取输入时,读取到的字符会被消耗掉,无法再次读取。但是使用ungetc函数可以将一个字符输入流,使得该字符可以再次被读取。 ungetc函数的使用方法是在读取输入后调用,可以将最后一个读取的字符输入流,以便下次读取。例如,假设我们从输入流中读取了字符'x',然后调用ungetc('x', stdin),接下来再次读取输入流时就可以再次读到字符'x'。 这个函数非常有用,特别是在输入某个字符后需要退一次的情况下。使用ungetc函数可以方便地退一个字符并再次读取,而不需要更加复杂的逻辑。 需要注意的是,ungetc函数只能放一个字符,并且只能放最近读取的字符。如果多次调用ungetc函数,只有最后一次调用有效。 总之,ungetc函数是一个非常有用的函数,可以在读取输入时将字符输入流,以便后续再次读取。它简化了退一个字符的操作,提高了程序的灵活性和可读性。 ### 答3: ungetc(c, stdin)是一个用于将字符c压输入stdin中的函数。它的作用是将之前从输入流中读取的字符c退,使其重新成为下一个读取的字符。 在C语言中,通常是使用getchar()函数从标准输入stdin中读取一个字符。但是,有时候我们在读取一个字符后,发现读取错了或者不需要使用该字符,这时候就可以使用ungetc()函数将该字符退输入流中,以便重新读取。 ungetc(c, stdin)的用法很简单,它的参数c是一个整型值,表示要退输入流中的字符。而stdin是一个指向标准输入流的指针。 当我们使用ungetc(c, stdin)函数后,下一次调用getchar()函数就会返被退字符c。这样就可以重新处理该字符,或者将其丢弃。 需要注意的是,ungetc()函数只能将一个字符退输入流中,而且只能退一次。如果多次调用ungetc()函数,只有最后一次的退有效。 总之,ungetc(c, stdin)函数是一个方便的用于将字符退输入流中的函数。它可以在需要重新处理或者丢弃之前读取的字符时使用,提高程序的灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值