关于字符串中的“\”,让我迷惑
const char *letters[] = {"\
\########@\
\## @\
\## @\
\######@\
\## @\
\## @\
\## @\
",
这是第28课课后题最后一道, 这里用了大量的“\”和回车的组合,在读取这个字符串的时候直接忽略了“\”的存在
谁能告诉我单独用“\”是一个什么用法?
#include<stdio.h>
const char ch[] =
"\\\###@\
";
int main(void)
{
printf("%s", ch);
return 0;
}
这段代码会输出 \###@第3个和最后一个“\”都会被忽略,这个我很迷惑。。。。。。
请各位大佬们出手相助,在此谢过~~~~ 你可以这样写
const char *letters[] = {
"
########@\
## @\
## @\
######@\
## @\
## @\
## @\
", 我做这题的时候发现删掉前面的 ‘\’ 没有影响,而后面的 ‘\’是换行符。 本帖最后由 gandixiwang 于 2022-9-7 20:00 编辑
#include<stdio.h>
const char ch[] =
"\\\###@\
";
int main(void)
{
printf("%s", ch);
return 0;
}
你这段代码会输出 \###@
是因为最后一个 ‘\’是换行符,就是换到下一行继续写的意思,编译器读完这一行后继续读取下一行,并省略‘\’这个符号
而前面只输出 ‘\’ 是因为为了避免输出不了‘\’这个符号,输入两个‘\’符号就可以让编译器知道你要输出 ‘\’ 这个符号。 gandixiwang 发表于 2022-9-7 19:48
我做这题的时候发现删掉前面的 ‘\’ 没有影响,而后面的 ‘\’是换行符。
第一个“\”不能删,会被认为是序编译指令。
按照小甲鱼能简不繁的风格,这样写肯定是有原因的,借助这个“\”摆出了想要打印的字符形状,很直观。 本帖最后由 zhangjinxuan 于 2022-9-7 21:03 编辑
这个叫 《转义》,转义字符有两种作用:
1. 表示特殊、非可见字符,比如 :'\n' 换行 '\0'结束符
2. 将一个字符串分多行显示
方法一讲解:写一个 反斜杠,表示转义开始
常见的转义字符表有这些:
'\a' 终端响铃,如果你在centos7系统中printf("\a"),虚拟机会发出‘滴答’的声音
'\b'退格,将当前位置退回前一列,你可以试试printf("fishd\bc"),看看会发生什么
'\n' 换行,光标移至下一行开头
'\r' 将光标移到本行开头,试试printf("ddfsd \r fishc")
'\0' 结束符,不讲
'\"' 表示一个双引号,试试printf("\\"");
'\\' 表示\,如printf("\\\")
...
当然,如果代码中存在不合法转义,那么这个'\'就会被’吃掉',比如:
'\\\###@"
先遇到\\,变成\,后面遇到\#,但因为'\#'是不合法转义,C会把这个 \"吃掉",所以只有一个'\',后面正常,所以最终结果是 '\###@'
方法二:
这个很简单,如:
"#####\n\
#\n\
#####\n\
#\n\
#\n\
"
每行后面的 \代表 “这个代码(字符串)太长,我想分两行写", 所以,在电脑里,这个字符串长这样:
"#####\n#\n#####\n#\n#\n"
[注:每行前面不能有空格或制表符,不然编译器会把前面的空白符当作字符串的一部分]
当然,也可以连接普通语句,比如
pri\
ntf("Fishc");
zhangjinxuan 发表于 2022-9-7 20:11
这个叫 《转义》,转义字符有两种作用:
1. 表示特殊、非可见字符,比如 :'\n' 换行 '\0'结束符
2....
原来是这样,以前只知道第一种转义的用法
这下知道了,谢谢~~~~~ 两手空空儿 发表于 2022-9-7 20:56
原来是这样,以前只知道第一种转义的用法
这下知道了,谢谢~~~~~
又双帮助了一个鱼油 非常感谢~~~~~{:5_109:}
页:
[1]