我最近无意中听到我的教授谈论能够做这样的事情。我找不到一个听起来可以做到这一点的方法。所以我的问题成立。在标准 getchar while 循环中,如何查看下一个字符。在此循环中,我传入一些数组,并让循环将通过命令行输入的字符串的字符从数组 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/