努力学c的小汪 发表于 2020-12-22 19:33:00

小甲鱼课后问题求解


要求 A:定义一个长度为 21 的字符数组,用于存放用户输入的文本;7G?}K~.13I
要求 B:如果用户输入的文本长度超过 20 个字符,且文本中存在空格,则截取至最接近末尾(第 20 个字符串)的空格;'8IVu
要求 C:如果用户输入的文本长度超过 20 个字符,且文本中不存在空格,则打印前 20 个字符
#include <stdio.h>
#include <string.h>

#define MAX 21 // 包含结束符就是21个字符

int main()
{
      int ch, space, i = 0;
      char str;

      space = MAX - 1;

      printf("请输入一行文本:");
      while ((ch = getchar()) != '\n')
      {
                str = ch;
                if (i == MAX - 1)
                {
                        break; // 到了字符数组最后一个位置
                }
                if (ch == ' ')
                {
                        space = i; // 记录最后一个空格的位置
                }
      }

      if (i >= MAX - 1)
      {
                str = '\0';
      }
      else
      {
                str = '\0';
      }

      printf("你输入的文本是:%s\n", str);

      return 0;
}
求解:经过if (i == MAX - 1)之后就会跳出while循环,那么i也就不可能大于max-1,那为什么还要来一个 if (i >= MAX - 1)

        {
                str = '\0';
        }

努力学c的小汪 发表于 2020-12-22 19:34:21

求解:经过if (i == MAX - 1)之后就会跳出while循环,那么i也就不可能大于max-1,那为什么还要来一个 if (i >= MAX - 1){str = '\0';}呢
      

努力学c的小汪 发表于 2020-12-22 21:16:01

1

风过无痕1989 发表于 2020-12-23 02:09:11

if (i == MAX - 1) 是对输入过程中位置的检查判断,定义是21,那么 i = 20 的时候中断循环,停止输入,其目的是要将最后一个位置留给结束符。后面的if (i >= MAX - 1) 是对输入字符位置的判断,与前一个 if (i == MAX - 1) 的关系就是,如果 if (i == MAX - 1) 不中断循环,那么就真的不可能存在 i >= MAX - 1 (MAX - 1 是等于20的,i = 21 就必然大于 MAX - 1)
#include <stdio.h>
#include <string.h>

#define MAX 21 // 包含结束符就是21个字符

int main()
{
      int ch, space, i = 0;
      char str;

      space = MAX - 1;         // 没有开始输入字符之前,有 20 个空余的位置(第21个位置是要放置结束符的),输入一个字符,space 就少一个

      printf("请输入一行文本:");
      while ((ch = getchar()) != '\n')
      {
                str = ch;
                if (i == MAX - 1)    // MAX - 1 就是第20个单元位置
                {
                        break; // 到了字符数组最后一个位置
                }
                if (ch == ' ')
                {
                        space = i; // 记录最后一个空格的位置
                }
      }

      if (i >= MAX - 1)       // 判断 i 是否为第 21 个单元,如果是,在这个位置设置结束符
      {
                str = '\0';
      }
      else                        // 如果不是,则在上面记录的最后一个空格处设置结束符
      {
                str = '\0';
      }

      printf("你输入的文本是:%s\n", str);

      return 0;
}

努力学c的小汪 发表于 2020-12-23 08:42:47

风过无痕1989 发表于 2020-12-23 02:09
if (i == MAX - 1) 是对输入过程中位置的检查判断,定义是21,那么 i = 20 的时候中断循环,停止输入,其目 ...

这样说的话那if (i >= MAX - 1)是不是可以换成i=max-1?为什么还要有个">"呢?

风过无痕1989 发表于 2020-12-23 09:33:12

努力学c的小汪 发表于 2020-12-23 08:42
这样说的话那if (i >= MAX - 1)是不是可以换成i=max-1?为什么还要有个">"呢?

可以,是 if(i == max-1) str = '\0';
页: [1]
查看完整版本: 小甲鱼课后问题求解