getchar()!= EOF循环偷看下一个字符

时间:2015-02-08 04:43:09

标签: c arrays string eof

我最近听到我的教授谈到能够做那样的事情。我找不到一个听起来像这样做的方法。所以我的问题就是。在标准的getchar while循环中,如何看一下下一个char。在这个循环中,我传入了一些数组,并且从数组s'chars到数组news'chars的循环切换字符,用于通过命令行输入的字符串。

无论如何,代码执行大多数情况下的目的,除了它还必须将“/ t”等字符视为单个字符而不是两个字符。我在考虑检查是否(c =='\'),然后检查下一个字符是否是r,t,n等。

TL:DR问题是如何让这个循环找到转义序列字符并将它们视为一个char而不是两个?非常感谢你。

void tr_str(char s[], char news[]){
int c;
size_t k =0;
    while ((c = getchar()) != EOF)
    {
        for(k=0; k < strlen(s);k++)
        {                   
            if(c == s[k])
            {
                c = news[k];
            }
        }
        putchar(c);
    }
}

1 个答案:

答案 0 :(得分:1)

通过阅读它来查看下一个字符,然后调用ungetc()

int c;
while ((c = getchar()) != EOF) {
    if (c == 'x') {
        ungetc(c, stdin);
        break;
    }
    ...
}

但是,当您处理转义序列时,只需要getchar()两次。

while ((c = getchar()) != EOF) {
    if (c == '\\') {
        c = getchar();
        switch (c) {
        case EOF: ...
        case 'n': ...
        case 't': ...
        }
    }
    ...
}