|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
要求 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[MAX];
space = MAX - 1;
printf("请输入一行文本:");
while ((ch = getchar()) != '\n')
{
str[i++] = ch;
if (i == MAX - 1)
{
break; // 到了字符数组最后一个位置
}
if (ch == ' ')
{
space = i; // 记录最后一个空格的位置
}
}
if (i >= MAX - 1)
{
str[space] = '\0';
}
else
{
str[i] = '\0';
}
printf("你输入的文本是:%s\n", str);
return 0;
}
求解:经过if (i == MAX - 1)之后就会跳出while循环,那么i也就不可能大于max-1,那为什么还要来一个 if (i >= MAX - 1)
        {
                str[space] = '\0';
        }
呢
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[MAX];
- space = MAX - 1; // 没有开始输入字符之前,有 20 个空余的位置(第21个位置是要放置结束符的),输入一个字符,space 就少一个
- printf("请输入一行文本:");
- while ((ch = getchar()) != '\n')
- {
- str[i++] = ch;
- if (i == MAX - 1) // MAX - 1 就是第20个单元位置
- {
- break; // 到了字符数组最后一个位置
- }
- if (ch == ' ')
- {
- space = i; // 记录最后一个空格的位置
- }
- }
- if (i >= MAX - 1) // 判断 i 是否为第 21 个单元,如果是,在这个位置设置结束符
- {
- str[space] = '\0';
- }
- else // 如果不是,则在上面记录的最后一个空格处设置结束符
- {
- str[i] = '\0';
- }
- printf("你输入的文本是:%s\n", str);
- return 0;
- }
复制代码
|
|