这个条件部分如何工作?

时间:2016-12-01 06:15:24

标签: c for-loop

在此程序中,有两个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;
}

4 个答案:

答案 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]值。

我建议你仔细阅读嵌套循环的概念,以避免将来出现这种混乱。