1

想法是尝试以“人类”的方式创建转义序列。例如,我使用两个字符来创建'\n''\''n'
我正在考虑的是char array[3]={'\\','n','\0'};
这样我就可以改变'n'角色并仍然将其用作转义序列。

当我printf(array)现在打印时:

\n

我希望它转到下一行。

例如:
如果我想手动检查字母表中的每个字母在用作带有循环的转义序列时会做什么?

for(char='a';char<='z';char++) 
{
  /* create escape sequence with that letter */
  /* print that escape sequence and see what it does */
}

这不是一项作业,没有实际用途(至少现在还没有),而只是一个理论问题,我无法在任何地方找到答案,也无法自己弄清楚。

4

2 回答 2

2

转义序列表示单个字符,并在编译时 进行评估。您不能在运行时将文字字符串解释为转义序列。例如 '\n' 是换行符(或换行符 - ASCII 中的 0x0A)

注意:

char array[3]={'\\','n','\0'};

相当于:

 char array[3] = "\\n" ;

printf(array)所以当你打印它时也许并不奇怪\n- 这就是你要求它做的事情。

未定义的转义序列根本无法编译,因此您可以简单地:

char = '\a' ;
char = '\b' ;
... // etc.

并查看编译器在哪些行上犹豫不决。然而,这不是完整的故事,因为一些转义序列需要操作数,例如\x它本身没有意义,而\xab字符由 0xab(十进制 171)表示。其他的甚至不是字母。大多数与空白有关,它们的效果可能取决于执行平台的终端或控制台功能。因此,天真的调查可能不会产生您寻求的结果,因为它没有考虑语言语义或平台功能。

实际上,所有支持的转义序列都已明确定义 - 除了可能与平台功能相关的那些之外,您会发现很少有惊喜(例如,如果您的目标无法生成哔声,\a 将没有有用的效果):

    \一声哔
    \b 退格
    \f 换页
    \n 换行
    \r 回车
    \t 水平制表符
    \v 垂直制表符
    \\ 反斜杠
    \' 单引号
    \" 双引号
    \0 ASCII 0x00(空终止符)
    \ooo 八进制表示
    \xdd 十六进制表示
于 2013-10-20T14:27:57.583 回答
0

编写自己的 printf() 怎么样?您可以在其中检查“\”后跟“n”,而不仅仅是从 char[0] 打印到 '\''n'。最后加上 "printf("\n");

制造

于 2013-10-20T13:50:02.300 回答