鱼C论坛

 找回密码
 立即注册
查看: 1200|回复: 6

[已解决]这里为啥会多个乱码

[复制链接]
发表于 2020-3-26 21:14:05 | 显示全部楼层 |阅读模式

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

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

x
  1. #include<stdio.h>
  2.   2 #include<string.h>
  3.   3 #define num 21
  4.   4 int main()
  5.   5 {
  6.   6
  7.   7         char str1[num];
  8.   8         int i=0;
  9.   9         _Bool flag=1;
  10. 10         printf("请输入一行文本:");
  11. 11         while((str1[i++] = getchar()) != '\n')
  12. 12         {
  13. 13                 if(str1[i]==' ')
  14. 14                 {
  15. 15                         flag=0;
  16. 16                 }
  17. 17
  18. 18         }
  19. 19         if(i<20)
  20. 20         {
  21. 21                 printf("%s\n",str1);
  22. 22         }
  23.                 if(i>=20)
  24. 24         {
  25. 25                 if(flag)
  26. 26                 {
  27. 27                 printf("HelloEveryone,I'm YourGoodFriend.\n");
  28. 28                 }
  29. 29                 else
  30. 30                 {
  31. 31                 printf("Hold on your hats.\n");
  32. 32                 }
  33. 33         }
  34. 34         return 0;
  35. 35
  36. 36
  37. 37
  38. 38 }
复制代码

捕获.PNG
最佳答案
2020-3-26 21:42:42
你的程序有两处错误。
  1. 1、while循环的条件中已经执行了 i++  while循环内的if语句应该判断的是str1[i-1],而不应该是str1[i]
  2. 2、执行完while循环后,字符串没有在结尾添加'\0',这样会导致printf  %s的时候越界(%s是以'\0'判断结尾的),输出乱码,这是你的程序出现乱码的原因。
复制代码


  1. #include<stdio.h>
  2. #include<string.h>
  3. #define num 21
  4. int main()
  5. {
  6.     char str1[num];
  7.     int i=0;
  8.     int flag=1;
  9.     printf("请输入一行文本:");
  10.     while((str1[i++] = getchar()) != '\n')
  11.      {
  12.              if(str1[i-1]==' ')
  13.              {
  14.                  flag=0;
  15.               }
  16.       }
  17.      str1[i-1]='\0';
  18.       if(i<20)
  19.       {
  20.            printf("%s\n",str1);
  21.       }
  22.       if(i>=20)
  23.       {
  24.           if(flag)
  25.           {
  26.              printf("HelloEveryone,I'm YourGoodFriend.\n");
  27.           }
  28.           else
  29.           {
  30.              printf("Hold on your hats.\n");
  31.           }
  32.       }
  33.       return 0;
  34.   }
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 21:15:25 | 显示全部楼层
1.我有空格的那个输出应该是Hold那个才对哇
2.那个fish后面的乱码是怎么回事
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 21:42:42 | 显示全部楼层    本楼为最佳答案   
你的程序有两处错误。
  1. 1、while循环的条件中已经执行了 i++  while循环内的if语句应该判断的是str1[i-1],而不应该是str1[i]
  2. 2、执行完while循环后,字符串没有在结尾添加'\0',这样会导致printf  %s的时候越界(%s是以'\0'判断结尾的),输出乱码,这是你的程序出现乱码的原因。
复制代码


  1. #include<stdio.h>
  2. #include<string.h>
  3. #define num 21
  4. int main()
  5. {
  6.     char str1[num];
  7.     int i=0;
  8.     int flag=1;
  9.     printf("请输入一行文本:");
  10.     while((str1[i++] = getchar()) != '\n')
  11.      {
  12.              if(str1[i-1]==' ')
  13.              {
  14.                  flag=0;
  15.               }
  16.       }
  17.      str1[i-1]='\0';
  18.       if(i<20)
  19.       {
  20.            printf("%s\n",str1);
  21.       }
  22.       if(i>=20)
  23.       {
  24.           if(flag)
  25.           {
  26.              printf("HelloEveryone,I'm YourGoodFriend.\n");
  27.           }
  28.           else
  29.           {
  30.              printf("Hold on your hats.\n");
  31.           }
  32.       }
  33.       return 0;
  34.   }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-27 09:14:43 | 显示全部楼层
sunrise085 发表于 2020-3-26 21:42
你的程序有两处错误。

想问一下为啥我复制代码会复制到前面的行数,然后我把小甲鱼的代码复制进我的编程里行首就会多很多tab符
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-27 09:22:11 | 显示全部楼层
孤世星辰 发表于 2020-3-27 09:14
想问一下为啥我复制代码会复制到前面的行数,然后我把小甲鱼的代码复制进我的编程里行首就会多很多tab符
...

我不知道你用的是什么编译器,也不知道为什么你复制程序会带有前面的行号。

复制小甲鱼的代码有很多tab,这个是因为不同的编译器的tab不一样,有的是4个空格,有的是8个空格,二刚好小甲鱼的代码是8个,你的是4个,所以复制过去之后tab就多了一倍。
目前不要纠结于tab的多少,先学精髓。
其实很多大神在编程的时候都不用tab的,只用空格,这样就不会遇到你所说的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-27 09:27:33 | 显示全部楼层
sunrise085 发表于 2020-3-27 09:22
我不知道你用的是什么编译器,也不知道为什么你复制程序会带有前面的行号。

复制小甲鱼的代码有很多ta ...


那怎么把这个行数弄掉哇,不然每次复制代码都挺麻烦的
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-27 09:43:56 | 显示全部楼层
孤世星辰 发表于 2020-3-27 09:27
那怎么把这个行数弄掉哇,不然每次复制代码都挺麻烦的

这个我也不知道。
你试试,Alt+鼠标选中,这个好像能够竖向区块选中。
具体行不行我也不知道。
你网上查一下吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-10 17:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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