我们知道一些转义序列'\ n'-新行,但是说我们不知道\ a,\ b,\ c...。\ z是转义序列。如何编写程序,使我们能够以printf语句或其他方式测试从a到z和/或A到Z的每个字符,以识别转义序列,如果是,则打印其值,例如输出可能如下所示:

'\ b'是一个特殊字符,值'\ b'= 8

该程序可能看起来很愚蠢,但我无法为其找到解决方案...
提前致谢。

最佳答案

正如Carl Norum指出的那样,这些由编译器解释。您可以采用类似于autoconf(生成configure脚本的程序)的方法:

#!/bin/bash

for LETTER in {a..z}
do
    cat > letter.c <<EOF
#include <stdio.h>
int main() { printf("\\\\$LETTER has ASCII value %u\n", "\\$LETTER"[0]); }
EOF
    cc -Werror -o letter letter.c > /dev/null 2>&1 && ./letter
done

输出:
\a has ASCII value 7
\b has ASCII value 8
\e has ASCII value 27
\f has ASCII value 12
\n has ASCII value 10
\r has ASCII value 13
\t has ASCII value 9
\v has ASCII value 11

注意:字符串常量而不是字符常量的原因仅仅是shell引用。这依赖于gcc-Werror,但是您可以通过其他方式解决该问题。

关于c - 如何编写程序以识别C中的转义序列并打印其值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8827011/

10-11 16:05