122Ml 发表于 2020-8-3 14:08:39

关于while函数使用异常

代码1,输入时无法处理第一个字符,如输入:ASDasd,打印结果:AsdASD
#include <stdio.h>

int main()
{
      char name;
      int i=0,count=32;
      
      printf("请输入一行英文句子:\n");
      scanf("%s",name);
      
      while(name!='\0')
      {
              if(name>='A'&&name<='Z')
              {
                      name=name+32;
                        }
                        else if(name>='a'&&name<='z')
                        {
                                name=name-32;
                        }
                }
      
      printf("%s\n",name);
      return 0;
}
代码2:无法处理第一个字符,如输入A,结果为0,但输入aA时,结果为1.
#include <stdio.h>

int main()
{
      char name;
      int i=0,count=0;
      
      printf("请输入一行英文句子:\n");
      scanf("%s",name);
      
      while(name!='\0')//字符串以\0结尾,当name=='\0'字符串结束
      {
                if(name>='A'&&name<='Z')
                {
                        count++;
                }
      }
      printf("有%d个大写字母!\n",count);
      
      return 0;
}


求助:程序错误的原因是什么?如何解决?

zltzlt 发表于 2020-8-3 14:10:11

因为在 while 判断那块 i 就加了 1,所以 i 会从 1 开始

baige 发表于 2020-8-3 14:10:55

本帖最后由 baige 于 2020-8-3 14:20 编辑

#include <stdio.h>

int main()
{
      char name;
      int i=-1,count=32;
      
      printf("请输入一行英文句子:\n");
      scanf("%s",name);
      
      while(name[++i]!='\0')
      {
                if(name>='A'&&name<='Z')
                {
                        name = name+32;
                }
                  else if(name>='a'&&name<='z')
                {
                        name=name-32;
                }
      }
      
      printf("%s\n",name);
      return 0;
}

#include <stdio.h>

int main()
{
      char name;
      int i=0,count=0;
      
      printf("请输入一行英文句子:\n");
      scanf("%s",name);
      
      while(name!='\0')//字符串以\0结尾,当name=='\0'字符串结束
      {
                if(name>='A'&&name<='Z')
                {
                        count++;
                }
                i++;
      }
      printf("有%d个大写字母!\n",count);
      
      return 0;
}


#include <stdio.h>

int main()
{
      char name;
      int i=0,count=32;
      
      printf("请输入一行英文句子:\n");
      scanf("%s",name);
      
      while(name!='\0')
      {
                if(name>='A'&&name<='Z')
                {
                        name = name+32;
                }
                  else if(name>='a'&&name<='z')
                {
                        name=name-32;
                }
                ++i;
      }
      
      printf("%s\n",name);
      return 0;
}

baige 发表于 2020-8-3 14:13:17

本帖最后由 baige 于 2020-8-3 14:18 编辑

我突然发现自己的错误了,while里面先判断name , 接着i++导致0没有判断是否是大写
第一题,第二题都是这个原因

122Ml 发表于 2020-8-3 14:21:02

baige 发表于 2020-8-3 14:13
我突然发现自己的错误了,while里面先判断name , 接着i++导致0没有判断是否是大写
第一题,第二题都是这 ...

ok,完全明白了
页: [1]
查看完整版本: 关于while函数使用异常