一、ungetc函数
ungetc函数是C语言标准库函数中的一员,其功能是将一个字符退回到流stdin的缓冲区中去,以便于下一次读取。
其原型如下:
int ungetc(int c, FILE *stream);
其中,参数c是将要被退回到缓冲区的字符,参数stream表示字符流,通常情况下设置为stdin或文件指针。
二、ungetc函数的用法
ungetc函数通常与getc、getchar等函数一起使用,可以用来改变输入流中字符的读取顺序。
当从stdin读取到一个字符,但是发现该字符并不是自己所需要的,可以使用ungetc函数将其退回到缓冲区后再使用getc等函数重新读取。这样可以方便地实现有条件的字符读取。
同时,ungetc函数的返回值表示是否成功退回,如果成功,则返回退回的字符,否则返回EOF。
三、ungetch的功能
ungetch是ungetc函数的一种变形,它将字符退回到输入缓冲区中,可以用来实现更为复杂的输入逻辑。
在不同的操作系统上,输入缓冲区的大小可能会有所不同,ungetch可以将字符放回到缓冲区队列的最前端,因此对于连续输入的字符,可以实现较为灵活的控制。
以下是ungetch函数的示例代码:
#define BUFSIZE 100 char buf[BUFSIZE]; int bufp = 0; int ungetch(int c) { if (bufp >= BUFSIZE) { printf("ungetch: too many characters\n"); return 0; } buf[bufp++] = c; return c; }
四、ungetchar
ungetchar是将一个字符退回到输入流中的简单函数,与ungetc函数类似,但是只能将1个字符退回到输入流中。
以下是ungetchar函数的示例代码:
int ungetchar(int c) { return ungetc(c,stdin); }
五、ungetc函数的用法例子
下面是一个简单的例子,演示了ungetc函数的用法。
#include <stdio.h> int main() { int c; while ((c = getchar()) != EOF) { if (c == '/') { if ((c = getchar()) == '/') { while ((c = getchar()) != '\n') ; continue; } else if (c == '*') { while ((c = getchar()) != EOF) { if (c == '*') { if ((c = getchar()) == '/') { break; } else { ungetc(c, stdin); } } } continue; } else { ungetc(c, stdin); } } putchar(c); } return 0; }
以上代码实现的是一个简单的注释过滤程序,可以过滤掉C语言中的注释内容。其中,ungetc函数用于在判断不是注释语法的时候将读取到的字符放回输入流,以便后续的读取。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/153220.html