小甲鱼课后问题求解
要求 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';
}
呢 求解:经过if (i == MAX - 1)之后就会跳出while循环,那么i也就不可能大于max-1,那为什么还要来一个 if (i >= MAX - 1){str = '\0';}呢
1 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;
} 风过无痕1989 发表于 2020-12-23 02:09
if (i == MAX - 1) 是对输入过程中位置的检查判断,定义是21,那么 i = 20 的时候中断循环,停止输入,其目 ...
这样说的话那if (i >= MAX - 1)是不是可以换成i=max-1?为什么还要有个">"呢? 努力学c的小汪 发表于 2020-12-23 08:42
这样说的话那if (i >= MAX - 1)是不是可以换成i=max-1?为什么还要有个">"呢?
可以,是 if(i == max-1) str = '\0';
页:
[1]