在此程序中,有两个for
循环。在每个for
循环中,条件部分为text[i][0]
和text[i][j]
。我不明白这种有条件的部分。这是如何运作或如何运作?
#include<stdio.h>
int main(void)
{
char text[][80] = {
"When","in","the",
"course","of","human",
"events",""
};
int i,j;
for(i=0; text[i][0]; i++){
for(j=0; text[i][j]; j++)
printf("%c", text[i][j]);
printf(" ");
}
printf("\n%c", text[0][0]);
return 0;
}
答案 0 :(得分:0)
它将循环,直到它在'\0'
和text[i][0]
中找到char数组text[i][j]
的结尾。
'\0'
在for循环中的行为为false
。
答案 1 :(得分:0)
for(i=0; text[i][0]; i++)
在这个循环中,用英语说,保持循环,直到字符串的第一个元素为空终止,'\0'
- &gt;十六进制0x00
。由于它为零,因此完成了循环。因此,在您的情况下,字符串应为""
。
for(j=0; text[i][j]; j++)
在这个循环中,它用英语说,一直循环,直到字符串的最后一个元素为空终止。
总体而言,整个循环表示逐个迭代所有字符串,直到看到""
。
答案 2 :(得分:0)
在所有循环中,测试是条件是否评估为真;除非条件的计算结果为false或为零,否则循环将继续。
在第一个循环中,条件等同于:
test[i][0] != 0
也可以写成:
test[i] != '\0'
因为test[i]
是char *
而test[i][0]
是字符串中的第一个字符,数据初始化为空字符串""
作为数组中的最后一个条目,因此该字符串中唯一的字符是'\0'
。
在第二个循环中,条件检查是否:
test[i][j]` != 0; // Or '\0'
当到达字符串的结尾时,这将评估为false。整个内部循环将更好地取代简单:
printf("%s ", test[i]);
最好省略尾随空白;有很多方法可以做到这一点,但它们都涉及测试或任务。
答案 3 :(得分:0)
简答:这是处理嵌套循环的简单概念。
说明:
char text[][80] = {
"When","in","the",
"course","of","human",
"events",""
};
它是一个二维数组的声明,其MAX字符长度为80个字符。
0 1 2 3 4 5 6 7 8 ..........79
W h e n
i n
t h e
c o u r s e
o f
h u m a n
e v e n t s
" "
我们知道在二维数组中,并不是必须定义行数而是列数。这只是最后一个参数(即本例中为80)。
for(i=0; text[i][0]; i++)
{
for(j=0; text[i][j]; j++)
{
printf("%c", text[i][j]);
printf(" ");
}
}
外部循环用于迭代行数,而内部循环用于迭代列数。
因此,通过观察每次迭代和上表,可以很容易地理解text [i] [j]值。
我建议你仔细阅读嵌套循环的概念,以避免将来出现这种混乱。