【发布时间】:2020-02-13 17:39:01
【问题描述】:
我正在查看课程幻灯片中的一个示例,但没有提供太多解释。
char getchar_escaped(void)
{
char c;
if ((c = getchar()) != '\\') return c;
switch ((c = getchar())) {
case '\\':
return '\\';
case 'n':
return '\n';
default:
return c;
}
}
这段代码到底发生了什么?这是如何处理换行符和双斜杠的?
【问题讨论】:
-
Try explaining the code out loud for your rubber duck(或合适的替代品,如室友、朋友、重要的其他人等)。
-
这个开关很浪费——
case '\\': return '\\';等同于default:,所以你可以用if ((c = getchar()) == 'n') return '\n'; return c;代替switch。基本上,如果输入包含一个反斜杠,后跟一个n,则该函数返回'\n'(换行符);对于任何其他反斜杠 X 序列,它会删除前导反斜杠并返回 X。代码无法正确处理EOF。应该是int c(函数的返回类型也应该是int);如果其中一个读取遇到 EOF,则代码将(大部分是巧合地)返回 EOF。
标签: c escaping backslash html-escape-characters