我最近听到我的教授在谈论能够做到这样的事情。我找不到听起来像这样做的单一方法。所以我的问题仍然存在。在标准的getchar while循环中,如何窥视下一个char。在此循环中,我传入一些数组,并通过从命令行将字符串的字符串从数组s的字符切换到数组新闻的字符的循环切换字符。

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

TL:DR问题是如何使此循环查找转义序列字符并将其视为一个字符而不是两个字符?非常感谢你。

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);
    }
}

最佳答案

通过阅读,然后调用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': ...
        }
    }
    ...
}

关于c - getchar()!= EOF循环查看下一个字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28390646/

10-12 01:27
查看更多