数组指针课后题求助
#include <stdio.h>#include <string.h>
int main()
{
char *array = {"FishC", "Five", "Star", "Good", "Wow"};
char *(*p) = &array;
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (i > strlen((*p)) - 1)//这里语法看得懂,但是逻辑看不懂
{
break;
}
printf("%c ", (*p));
}
printf("\n");
}
return 0;
}题目要求是转置打印出字符串,这是小甲鱼的代码,关于循环的跳出条件的逻辑我实在是看不懂,求大佬指点,满足break的条件到底意味着什么? 这个代码我曾经看过。虽然我看不懂,但我知道这句话的作用。比如说,wow只有三个字符。显然不能去打印第4个字符。这段代码的作用就是提前终止。 @人造人 @小酒酒呢 两位大大可以帮忙解答一下嘛,不胜感激{:5_105:} jzzc 发表于 2020-2-8 11:35
@人造人 @小酒酒呢 两位大大可以帮忙解答一下嘛,不胜感激
我记得论坛有一个规则,不要点名,请某人回答问题,会影响其他人答题的积极性。 外层的for循环用于控制打印的行
i = 0时打印到第0行
i = 1时打印到第1行
i = 2时打印到第2行
i = 3时打印到第3行
i = 4时打印到第4行
内层for循环用于控制打印哪个单词
j = 0时打印单词FishC
j = 1时打印单词Five
j = 2时打印单词Star
j = 3时打印单词Good
j = 4时打印单词Wow
打印单词是通过打印一个字母一个字母的方式实现的
if(i > strlen((*p)) - 1)
这个if决定是不是打印当前字母
当i=0,j=0时
i > strlen((*p)) - 1
0 > 5 - 1
条件为假,打印字母F和空格
当i=0,j=1时
i > strlen((*p)) - 1
0 > 4 - 1
条件为假,打印字母F和空格
当i=0,j=2时
i > strlen((*p)) - 1
0 > 4 - 1
条件为假,打印字母S和空格
当i=0,j=3时
i > strlen((*p)) - 1
0 > 4 - 1
条件为假,打印字母G和空格
当i=0,j=4时
i > strlen((*p)) - 1
0 > 3 - 1
条件为假,打印字母W和空格
换到下一行
当i=1,j=0时
i > strlen((*p)) - 1
1 > 5 - 1
条件为假,打印字母i和空格
当i=1,j=1时
i > strlen((*p)) - 1
1 > 4 - 1
条件为假,打印字母i和空格
当i=1,j=2时
i > strlen((*p)) - 1
1 > 4 - 1
条件为假,打印字母t和空格
当i=1,j=3时
i > strlen((*p)) - 1
1 > 4 - 1
条件为假,打印字母o和空格
当i=1,j=4时
i > strlen((*p)) - 1
1 > 3 - 1
条件为假,打印字母o和空格
换到下一行
当i=2,j=0时
i > strlen((*p)) - 1
2 > 5 - 1
条件为假,打印字母s和空格
当i=2,j=1时
i > strlen((*p)) - 1
2 > 4 - 1
条件为假,打印字母v和空格
当i=2,j=2时
i > strlen((*p)) - 1
2 > 4 - 1
条件为假,打印字母a和空格
当i=2,j=3时
i > strlen((*p)) - 1
2 > 4 - 1
条件为假,打印字母o和空格
当i=2,j=4时
i > strlen((*p)) - 1
2 > 3 - 1
条件为假,打印字母w和空格
换到下一行
当i=3,j=0时
i > strlen((*p)) - 1
3 > 5 - 1
条件为假,打印字母h和空格
当i=3,j=1时
i > strlen((*p)) - 1
3 > 4 - 1
条件为假,打印字母e和空格
当i=3,j=2时
i > strlen((*p)) - 1
3 > 4 - 1
条件为假,打印字母r和空格
当i=3,j=3时
i > strlen((*p)) - 1
3 > 4 - 1
条件为假,打印字母d和空格
当i=3,j=4时
i > strlen((*p)) - 1
3 > 3 - 1
条件为真,跳过当前字母和空格
换到下一行
当i=4,j=0时
i > strlen((*p)) - 1
4 > 5 - 1
条件为假,打印字母C和空格
当i=4,j=1时
i > strlen((*p)) - 1
4 > 4 - 1
条件为真,跳过当前字母和空格
当i=4,j=2时
i > strlen((*p)) - 1
4 > 4 - 1
条件为真,跳过当前字母和空格
当i=4,j=3时
i > strlen((*p)) - 1
4 > 4 - 1
条件为真,跳过当前字母和空格
当i=4,j=4时
i > strlen((*p)) - 1
4 > 3 - 1
条件为真,跳过当前字母和空格
换到下一行
不知道上面的解释你是不是满意
还有,你是不是感觉上面的那段话有点怪怪的,^_^
对,没错,上面的那段话是用程序生成的,原来我是打算人工写的,但是还没有写到一半我就放弃了,我选择用程序生成,^_^
#include <stdio.h>
#include <string.h>
int main()
{
char *array = {"FishC", "Five", "Star", "Good", "Wow"};
char *(*p) = &array;
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
printf("当i=%d,j=%d时\n", i, j);
printf("i > strlen((*p)) - 1\n");
printf("%d > %d - 1\n", i, strlen((*p)));
if(i > strlen((*p)) - 1)
printf("条件为真,跳过当前字母和空格\n");
else
printf("条件为假,打印字母%c和空格\n", (*p));
printf("\n");
}
printf("换到下一行\n");
printf("\n");
}
return 0;
}
怎么样?^_^
这类问题你可以把所有的变量都带入一个确定的值,然后看看会发生什么
例如
当i=3,j=4时
i > strlen((*p)) - 1
3 > 3 - 1
条件为真,跳过当前字母和空格
当i=2,j=1时
i > strlen((*p)) - 1
2 > 4 - 1
条件为假,打印字母v和空格
像这样,带入确定的值,然后看看会发生什么,这样多分析几种情况就理解了
召唤风云 发表于 2020-2-8 13:06
我记得论坛有一个规则,不要点名,请某人回答问题,会影响其他人答题的积极性。
不好意思我不晓得,这个规则具体在哪里可以发一下链接吗{:5_99:} 人造人 发表于 2020-2-8 13:52
不知道上面的解释你是不是满意
还有,你是不是感觉上面的那段话有点怪怪的,^_^
好强,这种分析方法我确实没想到,现在我明白了,i还可以理解为打印原字符串的第(i+1)个字母,这样子那个if语句就更容易看懂了,谢谢人造人{:5_95:} jzzc 发表于 2020-2-8 20:58
好强,这种分析方法我确实没想到,现在我明白了,i还可以理解为打印原字符串的第(i+1)个字母,这样子那 ...
^_^ jzzc 发表于 2020-2-8 20:53
不好意思我不晓得,这个规则具体在哪里可以发一下链接吗
^_^
另外,这图片压缩的也太厉害了,都看不清上面的字了
@小甲鱼 人造人 发表于 2020-2-8 21:30
^_^
好滴,以后我会注意{:5_109:} 人造人 发表于 2020-2-8 21:33
另外,这图片压缩的也太厉害了,都看不清上面的字了
@小甲鱼
好的,我尝试处理一下~
小甲鱼 发表于 2020-2-9 00:33
好的,我尝试处理一下~
可以了,点击图片可以打开原图。 小甲鱼 发表于 2020-2-9 00:33
好的,我尝试处理一下~
^_^
页:
[1]