元气腋毛侠 发表于 2018-9-23 13:52:06

关于C语言的三个小问题


\n\是否等于\n\\呢?因为编译器编译出来结果一样
\\n\却显示出来\n
\n\\的\\是重新定义为\连接下一行,\\n\的\\是重新定义成\字符吗



②单纯输入%-999.8f的话只是左对齐并输出变量,可是改成%9-999.8f却输出了-999.8f,这个负号前面的9是有什么作用呢,既把本应该多出来的几百个空格弄没了,也没有输出变量,也不是直接输出引号内的内容


③编译后运行程序,控制台一闪而过的原因是什么


claws0n 发表于 2018-9-23 13:59:09

1. \ 是接下一行 \\ 第一个进行转义,转了还是自己,所以结果一样。\n 是转义的特殊符,你把 \ 配给别人了,认不出是 \n。
2. 做对齐是负号 %-10.8f左对齐,10个占位符,8个小数点,比较少前后都配的吧
3. VS ? return 0; 之前加 system("pause"); 或者 getchar();

元气腋毛侠 发表于 2018-9-23 14:23:40

claws0n 发表于 2018-9-23 13:59
1. \ 是接下一行 \\ 第一个进行转义,转了还是自己,所以结果一样。\n 是转义的特殊符,你把 \ 配给别人了 ...

希望说的详细一点...都没有说到点上
①\\n\前面的\\变成\,这个\为什么失去了本身的作用
\n\\后面的\\变成\,这个\为什么还有连接下一行的作用
②负号前的9的作用是什么,为什么既把本应该多出来的几百个空格弄没了,也没有输出变量,也不是直接输出引号内的内容
③原因是什么

claws0n 发表于 2018-9-23 14:42:29

元气腋毛侠 发表于 2018-9-23 14:23
希望说的详细一点...都没有说到点上
①\\n\前面的\\变成\,这个\为什么失去了本身的作用
\n\\后面的\\ ...

1. \ 是转义符,配上不同的东西有不同的作用/功能/字符,你让 \\ 在前面,被配掉了,所以剩下 n 这个字符,所以不是回车。\\在转义之后还是 \ 所以功能保存。
2. 你要左对齐的话,一定是符号开始的,右对齐就没有符号,置中就 ^ 。10 是说要是要有10个占位符,就是不管你的数字是多少(小于10位数),都用 10 个格子表示。但是浮点数不看这个,浮点数是看后面的 %.8f 就是要 8 位小数。
3. 执行完就结束。system("pause") 是让系统暂停以下。getchar() 是要求输入字符,都能达到等待的作用

元气腋毛侠 发表于 2018-9-23 15:00:06

claws0n 发表于 2018-9-23 14:42
1. \ 是转义符,配上不同的东西有不同的作用/功能/字符,你让 \\ 在前面,被配掉了,所以剩下 n 这个字符 ...

1.\\n\的\\被配掉不是还剩\吗,变成\n\
那么\n\中,\n的\既然失去了原本的作用,变成一个普通的字符
那为什么\n\\的\\变成\后还是起到\本身连接下一行的作用,而不是输出\
因为\\n\\n\\中 \\ 不都变成了\吗   两个\n\为什么不一样。我是不懂这个

2.我不是纠结%f的定义,是9-999第一个9改变了什么,为什么直接输出了-999

谢谢大佬

claws0n 发表于 2018-9-23 15:14:38

元气腋毛侠 发表于 2018-9-23 15:00
1.\\n\的\\被配掉不是还剩\吗,变成\n\
那么\n\中,\n的\既然失去了原本的作用,变成一个普通的字符
那 ...

1. 第一个ok 。第二个转义了之后还是 \ 呀,所以还是有接下去的作用。\ 的作用是此行不需要分号……
\n\\ == \n\

2. %9 是没有这个东西的 所以剩下 -999.8f ……

元气腋毛侠 发表于 2018-9-23 18:41:27

claws0n 发表于 2018-9-23 15:14
1. 第一个ok 。第二个转义了之后还是 \ 呀,所以还是有接下去的作用。\ 的作用是此行不需要分号……
\n\ ...

我可能说的不是很清楚...大佬你看一下这两个对比

第二张图加了\输出没有改变,而没有输出\,是否能理解为\\变成\后功能依旧还在,所以没有输出为\


第三张图加了一个\后,\\变成\,而这个\没有起到任何作用(既没有连接下一行也没有换行),只是作为一个符号输出
第四张图加了两个\\后,前面的两个\变成\,也没有起到任何作用

总的来说就是,为什么第二张图的\\变成\后依旧有作用(没有输出\),而三四张图的\\变成\后失效了(输出了\)

人造人 发表于 2018-9-23 19:05:55

仔细观察下面的程序和对应的输出

#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
请按任意键继续. . .

人造人 发表于 2018-9-23 19:09:43

#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;
}

claws0n 发表于 2018-9-23 19:16:44

元气腋毛侠 发表于 2018-9-23 18:41
我可能说的不是很清楚...大佬你看一下这两个对比

第二张图加了\输出没有改变,而没有输出\,是否能理 ...

右上好像少了一个 \ ,也许在后面就认了。
左下 \\n\ 前面的被配掉了,n 就没有被转义,只是单纯的字符。
右下,\\\n\,被打印出来啦~

正确地用就好,有很多东西是未定义行为

元气腋毛侠 发表于 2018-9-23 20:17:33

claws0n 发表于 2018-9-23 19:16
右上好像少了一个 \ ,也许在后面就认了。
左下 \\n\ 前面的被配掉了,n 就没有被转义,只是单纯的字符 ...

谢谢大佬,解决了
\n\\中\n\连接一次,\再连接一次

\\n\中\\变成\,输出\n

\\\n\中\\变成\,\n\连接

元气腋毛侠 发表于 2018-9-23 20:22:07

人造人 发表于 2018-9-23 19:09


谢谢大佬,不过一些函数还没学到...

人造人 发表于 2018-9-23 20:40:02

元气腋毛侠 发表于 2018-9-23 20:22
谢谢大佬,不过一些函数还没学到...

哪个函数没学?
整个程序就一个printf函数和main函数
一共两个函数
哪一个没学?
页: [1]
查看完整版本: 关于C语言的三个小问题