关于C语言的三个小问题
①\n\是否等于\n\\呢?因为编译器编译出来结果一样
\\n\却显示出来\n
\n\\的\\是重新定义为\连接下一行,\\n\的\\是重新定义成\字符吗
②单纯输入%-999.8f的话只是左对齐并输出变量,可是改成%9-999.8f却输出了-999.8f,这个负号前面的9是有什么作用呢,既把本应该多出来的几百个空格弄没了,也没有输出变量,也不是直接输出引号内的内容
③编译后运行程序,控制台一闪而过的原因是什么
1. \ 是接下一行 \\ 第一个进行转义,转了还是自己,所以结果一样。\n 是转义的特殊符,你把 \ 配给别人了,认不出是 \n。
2. 做对齐是负号 %-10.8f左对齐,10个占位符,8个小数点,比较少前后都配的吧
3. VS ? return 0; 之前加 system("pause"); 或者 getchar(); claws0n 发表于 2018-9-23 13:59
1. \ 是接下一行 \\ 第一个进行转义,转了还是自己,所以结果一样。\n 是转义的特殊符,你把 \ 配给别人了 ...
希望说的详细一点...都没有说到点上
①\\n\前面的\\变成\,这个\为什么失去了本身的作用
\n\\后面的\\变成\,这个\为什么还有连接下一行的作用
②负号前的9的作用是什么,为什么既把本应该多出来的几百个空格弄没了,也没有输出变量,也不是直接输出引号内的内容
③原因是什么 元气腋毛侠 发表于 2018-9-23 14:23
希望说的详细一点...都没有说到点上
①\\n\前面的\\变成\,这个\为什么失去了本身的作用
\n\\后面的\\ ...
1. \ 是转义符,配上不同的东西有不同的作用/功能/字符,你让 \\ 在前面,被配掉了,所以剩下 n 这个字符,所以不是回车。\\在转义之后还是 \ 所以功能保存。
2. 你要左对齐的话,一定是符号开始的,右对齐就没有符号,置中就 ^ 。10 是说要是要有10个占位符,就是不管你的数字是多少(小于10位数),都用 10 个格子表示。但是浮点数不看这个,浮点数是看后面的 %.8f 就是要 8 位小数。
3. 执行完就结束。system("pause") 是让系统暂停以下。getchar() 是要求输入字符,都能达到等待的作用 claws0n 发表于 2018-9-23 14:42
1. \ 是转义符,配上不同的东西有不同的作用/功能/字符,你让 \\ 在前面,被配掉了,所以剩下 n 这个字符 ...
1.\\n\的\\被配掉不是还剩\吗,变成\n\
那么\n\中,\n的\既然失去了原本的作用,变成一个普通的字符
那为什么\n\\的\\变成\后还是起到\本身连接下一行的作用,而不是输出\
因为\\n\\n\\中 \\ 不都变成了\吗 两个\n\为什么不一样。我是不懂这个
2.我不是纠结%f的定义,是9-999第一个9改变了什么,为什么直接输出了-999
谢谢大佬 元气腋毛侠 发表于 2018-9-23 15:00
1.\\n\的\\被配掉不是还剩\吗,变成\n\
那么\n\中,\n的\既然失去了原本的作用,变成一个普通的字符
那 ...
1. 第一个ok 。第二个转义了之后还是 \ 呀,所以还是有接下去的作用。\ 的作用是此行不需要分号……
\n\\ == \n\
2. %9 是没有这个东西的 所以剩下 -999.8f …… claws0n 发表于 2018-9-23 15:14
1. 第一个ok 。第二个转义了之后还是 \ 呀,所以还是有接下去的作用。\ 的作用是此行不需要分号……
\n\ ...
我可能说的不是很清楚...大佬你看一下这两个对比
第二张图加了\输出没有改变,而没有输出\,是否能理解为\\变成\后功能依旧还在,所以没有输出为\
第三张图加了一个\后,\\变成\,而这个\没有起到任何作用(既没有连接下一行也没有换行),只是作为一个符号输出
第四张图加了两个\\后,前面的两个\变成\,也没有起到任何作用
总的来说就是,为什么第二张图的\\变成\后依旧有作用(没有输出\),而三四张图的\\变成\后失效了(输出了\) 仔细观察下面的程序和对应的输出
#include <stdio.h>
int main(void)
{
char *str = "**\n**";
for(int i = 0; str; ++i)
printf("%.2X ", str);
printf("\n");
return 0;
}
2A 2A 0A 2A 2A
请按任意键继续. . .
#include <stdio.h>
int main(void)
{
char *str = "**\n\**";
for(int i = 0; str; ++i)
printf("%.2X ", str);
printf("\n");
return 0;
}
2A 2A 0A 2A 2A
请按任意键继续. . .
#include <stdio.h>
int main(void)
{
char *str = "**\n\
**";
for(int i = 0; str; ++i)
printf("%.2X ", str);
printf("\n");
return 0;
}
2A 2A 0A 2A 2A
请按任意键继续. . .
#include <stdio.h>
int main(void)
{
char *str = "**\n\
**";
for(int i = 0; str; ++i)
printf("%.2X ", str);
printf("\n");
return 0;
}
2A 2A 0A 09 2A 2A
请按任意键继续. . .
#include <stdio.h>
int main(void)
{
char *str = "**\n\
**";
for(int i = 0; str; ++i)
printf("%.2X ", str);
printf("\n");
return 0;
}
2A 2A 0A 09 09 2A 2A
请按任意键继续. . .
#include <stdio.h>
int main(void)
{
char *str = "**\n\\**";
for(int i = 0; str; ++i)
printf("%.2X ", str);
printf("\n");
return 0;
}
2A 2A 0A 5C 2A 2A
请按任意键继续. . .
#include <stdio.h>
int main(void)
{
char *str = "**\n\\
**";
for(int i = 0; str; ++i)
printf("%.2X ", str);
printf("\n");
return 0;
}
2A 2A 0A 2A 2A
请按任意键继续. . .
#include <stdio.h>
int main(void)
{
char *str = "**\n\\
**";
for(int i = 0; str; ++i)
printf("%.2X ", str);
printf("\n");
return 0;
}
2A 2A 0A 09 2A 2A
请按任意键继续. . .
#include <stdio.h>
int main(void)
{
char *str = "**\n\\
**";
for(int i = 0; str; ++i)
printf("%.2X ", str);
printf("\n");
return 0;
}
2A 2A 0A 09 09 2A 2A
请按任意键继续. . .
#include <stdio.h>
int main(void)
{
printf("hello world!\n");
return 0;
}
#include <stdio.h>
in\
t m\
ain(voi\
d)
{
p\
rintf("hello world!\n");
retur\
n 0;
}
元气腋毛侠 发表于 2018-9-23 18:41
我可能说的不是很清楚...大佬你看一下这两个对比
第二张图加了\输出没有改变,而没有输出\,是否能理 ...
右上好像少了一个 \ ,也许在后面就认了。
左下 \\n\ 前面的被配掉了,n 就没有被转义,只是单纯的字符。
右下,\\\n\,被打印出来啦~
正确地用就好,有很多东西是未定义行为 claws0n 发表于 2018-9-23 19:16
右上好像少了一个 \ ,也许在后面就认了。
左下 \\n\ 前面的被配掉了,n 就没有被转义,只是单纯的字符 ...
谢谢大佬,解决了
\n\\中\n\连接一次,\再连接一次
\\n\中\\变成\,输出\n
\\\n\中\\变成\,\n\连接 人造人 发表于 2018-9-23 19:09
谢谢大佬,不过一些函数还没学到... 元气腋毛侠 发表于 2018-9-23 20:22
谢谢大佬,不过一些函数还没学到...
哪个函数没学?
整个程序就一个printf函数和main函数
一共两个函数
哪一个没学?
页:
[1]