演習4-9 K&R プログラミング言語C

演習4-9

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFSIZE 100

static int buf[BUFSIZE]; /* ungetch 用のバッファ */
static int bufp = 0;      /* buf 中の次の空き位置 */

static int getch(void);
static void ungetch(int c);
static void ungets(char s[]);

int main(void)
{
    char s[] = "hello, world.";
    int c;

    ungetch(EOF);
    ungets(s);

    while ((c = getch()) != EOF) {
        if ((putchar(c) < 0)) {
            exit(EXIT_FAILURE);
        }
    }

    return 0;
}

static int getch(void) /* (押し戻された可能性もある)1文字をとってくる */
{
    return (bufp > 0) ? buf[--bufp] : getchar();
}

static void ungetch(int c)
{
    if (bufp >= BUFSIZE) {
        printf("ungetch: too many characters\n");
    } else if (c != EOF) {
        buf[bufp++] = c;
    }
}

static void ungets(char s[])
{
    size_t l = strlen(s);

    while (l > 0) {
        ungetch(s[--l]);
    }
}
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»