鱼C论坛

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

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

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

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

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

x
 #include<stdio.h>
  2 #include<string.h>
  3 #define num 21
  4 int main()
  5 {
  6 
  7         char str1[num];
  8         int i=0;
  9         _Bool flag=1;
 10         printf("请输入一行文本:");
 11         while((str1[i++] = getchar()) != '\n')
 12         {
 13                 if(str1[i]==' ')
 14                 {
 15                         flag=0;
 16                 }
 17 
 18         }
 19         if(i<20)
 20         {
 21                 printf("%s\n",str1);
 22         }
                 if(i>=20)
 24         {
 25                 if(flag)
 26                 {
 27                 printf("HelloEveryone,I'm YourGoodFriend.\n");
 28                 }
 29                 else
 30                 {
 31                 printf("Hold on your hats.\n");
 32                 }
 33         }
 34         return 0;
 35 
 36 
 37 
 38 }
捕获.PNG
最佳答案
2020-3-26 21:42:42
你的程序有两处错误。
1、while循环的条件中已经执行了 i++  while循环内的if语句应该判断的是str1[i-1],而不应该是str1[i]
2、执行完while循环后,字符串没有在结尾添加'\0',这样会导致printf  %s的时候越界(%s是以'\0'判断结尾的),输出乱码,这是你的程序出现乱码的原因。

#include<stdio.h>
#include<string.h>
#define num 21
int main()
{
    char str1[num];
    int i=0;
    int flag=1;
    printf("请输入一行文本:");
    while((str1[i++] = getchar()) != '\n')
     {
             if(str1[i-1]==' ')
             {
                 flag=0;
              }
      }
     str1[i-1]='\0';
      if(i<20)
      {
           printf("%s\n",str1);
      }
      if(i>=20)
      {
          if(flag)
          {
             printf("HelloEveryone,I'm YourGoodFriend.\n");
          }
          else
          {
             printf("Hold on your hats.\n");
          }
      }
      return 0;
  }

本帖被以下淘专辑推荐:

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

使用道具 举报

 楼主| 发表于 2020-3-26 21:15:25 | 显示全部楼层
1.我有空格的那个输出应该是Hold那个才对哇
2.那个fish后面的乱码是怎么回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

#include<stdio.h>
#include<string.h>
#define num 21
int main()
{
    char str1[num];
    int i=0;
    int flag=1;
    printf("请输入一行文本:");
    while((str1[i++] = getchar()) != '\n')
     {
             if(str1[i-1]==' ')
             {
                 flag=0;
              }
      }
     str1[i-1]='\0';
      if(i<20)
      {
           printf("%s\n",str1);
      }
      if(i>=20)
      {
          if(flag)
          {
             printf("HelloEveryone,I'm YourGoodFriend.\n");
          }
          else
          {
             printf("Hold on your hats.\n");
          }
      }
      return 0;
  }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想问一下为啥我复制代码会复制到前面的行数,然后我把小甲鱼的代码复制进我的编程里行首就会多很多tab符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

使用道具 举报

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

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


那怎么把这个行数弄掉哇,不然每次复制代码都挺麻烦的
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个我也不知道。
你试试,Alt+鼠标选中,这个好像能够竖向区块选中。
具体行不行我也不知道。
你网上查一下吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 12:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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