liuhuan336 发表于 2022-8-27 18:48:49

求助

#include <stdio.h>

#define MAX 1024

int main()
{
      char str;
      char *target = str;
      int length = 0;

      printf("请输入一个字符串:");
      fgets(str, MAX, stdin);

      while (*target++ != '\0')
      {
                length++; //这里最后的值为什么要减一呢!!!!<<<<<<<<<<<<<<<<<<<<<<<<---------------------------------------------
      }

      printf("您总共输入了 %d 个字符!\n", length - 1);

      return 0;
}

length的值为什么最后要减一?

临时号 发表于 2022-8-27 18:58:26

length在这里是一个计数器
++是加1不是减1

liuhuan336 发表于 2022-8-27 19:15:57

临时号 发表于 2022-8-27 18:58
length在这里是一个计数器
++是加1不是减1

printf("您总共输入了 %d 个字符!\n", length - 1);   这一句

温良先生 发表于 2022-8-27 19:28:06

原因在于你多存了一个字符,你把最后的回车也存了下来,你把\0换成\n就好了,那个减一就不用了#include <stdio.h>

#define MAX 1024

int main()
{
      char str;
      char *target = str;
      int length = 0;

      printf("请输入一个字符串:");
      fgets(str, MAX, stdin);

      while (*target++ != '\n')
      {
                length++; //这里最后的值为什么要减一呢!!!!<<<<<<<<<<<<<<<<<<<<<<<<---------------------------------------------
      }

      printf("您总共输入了 %d 个字符!\n", length );

      return 0;
}

临时号 发表于 2022-8-27 19:41:12

liuhuan336 发表于 2022-8-27 19:15
printf("您总共输入了 %d 个字符!\n", length - 1);   这一句

fgets不像scanf,fgets会读到\n也就是回车
所以length - 1是为了减去那个回车

liuhuan336 发表于 2022-8-27 19:56:09

临时号 发表于 2022-8-27 19:41
fgets不像scanf,fgets会读到\n也就是回车
所以length - 1是为了减去那个回车

明白,谢谢!
页: [1]
查看完整版本: 求助