鱼C论坛

 找回密码
 立即注册
查看: 1526|回复: 12

[已解决]关于C语言的三个小问题

[复制链接]
发表于 2018-9-23 13:52:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

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



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


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


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

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

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

正确地用就好,有很多东西是未定义行为
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-23 13:59:09 | 显示全部楼层
1. \ 是接下一行 \\ 第一个进行转义,转了还是自己,所以结果一样。\n 是转义的特殊符,你把 \ 配给别人了,认不出是 \n。
2. 做对齐是负号 %-10.8f  左对齐,10个占位符,8个小数点,比较少前后都配的吧
3. VS ? return 0; 之前加 system("pause"); 或者 getchar();
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

希望说的详细一点...都没有说到点上
①\\n\前面的\\变成\,这个\为什么失去了本身的作用
\n\\后面的\\变成\,这个\为什么还有连接下一行的作用
②负号前的9的作用是什么,为什么既把本应该多出来的几百个空格弄没了,也没有输出变量,也不是直接输出引号内的内容
③原因是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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() 是要求输入字符,都能达到等待的作用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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

谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

2. %9 是没有这个东西的 所以剩下 -999.8f ……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我可能说的不是很清楚...大佬你看一下这两个对比
5.png
第二张图加了\输出没有改变,而没有输出\,是否能理解为\\变成\后功能依旧还在,所以没有输出为\

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

总的来说就是,为什么第二张图的\\变成\后依旧有作用(没有输出\),而三四张图的\\变成\后失效了(输出了\)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 19:05:55 | 显示全部楼层
仔细观察下面的程序和对应的输出

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char *str = "**\n**";
  5.         for(int i = 0; str[i]; ++i)
  6.                 printf("%.2X ", str[i]);
  7.        
  8.         printf("\n");
  9.         return 0;
  10. }

  11. 2A 2A 0A 2A 2A
  12. 请按任意键继续. . .
复制代码

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char *str = "**\n\**";
  5.         for(int i = 0; str[i]; ++i)
  6.                 printf("%.2X ", str[i]);
  7.        
  8.         printf("\n");
  9.         return 0;
  10. }

  11. 2A 2A 0A 2A 2A
  12. 请按任意键继续. . .
复制代码

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char *str = "**\n\
  5. **";
  6.         for(int i = 0; str[i]; ++i)
  7.                 printf("%.2X ", str[i]);
  8.        
  9.         printf("\n");
  10.         return 0;
  11. }

  12. 2A 2A 0A 2A 2A
  13. 请按任意键继续. . .
复制代码

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char *str = "**\n\
  5.         **";
  6.         for(int i = 0; str[i]; ++i)
  7.                 printf("%.2X ", str[i]);
  8.        
  9.         printf("\n");
  10.         return 0;
  11. }

  12. 2A 2A 0A 09 2A 2A
  13. 请按任意键继续. . .
复制代码

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char *str = "**\n\
  5.                 **";
  6.         for(int i = 0; str[i]; ++i)
  7.                 printf("%.2X ", str[i]);
  8.        
  9.         printf("\n");
  10.         return 0;
  11. }

  12. 2A 2A 0A 09 09 2A 2A
  13. 请按任意键继续. . .
复制代码


  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char *str = "**\n\\**";
  5.         for(int i = 0; str[i]; ++i)
  6.                 printf("%.2X ", str[i]);
  7.        
  8.         printf("\n");
  9.         return 0;
  10. }

  11. 2A 2A 0A 5C 2A 2A
  12. 请按任意键继续. . .
复制代码

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char *str = "**\n\\
  5. **";
  6.         for(int i = 0; str[i]; ++i)
  7.                 printf("%.2X ", str[i]);
  8.        
  9.         printf("\n");
  10.         return 0;
  11. }

  12. 2A 2A 0A 2A 2A
  13. 请按任意键继续. . .
复制代码

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char *str = "**\n\\
  5.         **";
  6.         for(int i = 0; str[i]; ++i)
  7.                 printf("%.2X ", str[i]);
  8.        
  9.         printf("\n");
  10.         return 0;
  11. }

  12. 2A 2A 0A 09 2A 2A
  13. 请按任意键继续. . .
复制代码

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char *str = "**\n\\
  5.                 **";
  6.         for(int i = 0; str[i]; ++i)
  7.                 printf("%.2X ", str[i]);
  8.        
  9.         printf("\n");
  10.         return 0;
  11. }

  12. 2A 2A 0A 09 09 2A 2A
  13. 请按任意键继续. . .
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 19:09:43 | 显示全部楼层
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         printf("hello world!\n");
  5.         return 0;
  6. }
复制代码

  1. #include <stdio.h>

  2. in\
  3. t m\
  4. ain(voi\
  5. d)
  6. {
  7.         p\
  8. rintf("hello world!\n");
  9.         retur\
  10. n 0;
  11. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 19:16:44 | 显示全部楼层    本楼为最佳答案   
元气腋毛侠 发表于 2018-9-23 18:41
我可能说的不是很清楚...大佬你看一下这两个对比

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

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

正确地用就好,有很多东西是未定义行为
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

\\\n\中\\变成\,\n\连接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-23 20:22:07 | 显示全部楼层

谢谢大佬,不过一些函数还没学到...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 20:40:02 | 显示全部楼层
元气腋毛侠 发表于 2018-9-23 20:22
谢谢大佬,不过一些函数还没学到...

哪个函数没学?
整个程序就一个printf函数和main函数
一共两个函数
哪一个没学?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 05:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表