解释(i = 0; 1; i ++)在C中的作用?

Dva*_*asa 4 c string file-io for-loop

所需的for loop开始之后fopen,具体for (i=0;1;i++)到底是什么?什么时候for loop会终止?达到价值后i=1?什么时候会发生?(在互联网和书C中寻找这种类型的循环(如何编程,Deitel和Deitel),没有任何结果......)(代码的目的是将多行转换final.txt为字符串words[i][j];)

    int lines_allocated = 1000;
    int max_line_len = 150;
    double c[42][1000]={0};
    int print;

    char **words = (char **)malloc(sizeof(char*)*lines_allocated);
    if (words==NULL)
        {
        fprintf(stderr,"Out of memory (1).\n");
        exit(1);
        }

    FILE *fp = fopen("final.txt", "r");
    if (fp == NULL)
        {
        fprintf(stderr,"Error opening file.\n");
        exit(2);
        }

    int i;
    for (i=0;1;i++)
        {
        int j;

        if (i >= lines_allocated)
            {
            int new_size;

            new_size = lines_allocated*2;
            words = (char **)realloc(words,sizeof(char*)*new_size);
            if (words==NULL)
                {
                fprintf(stderr,"Out of memory.\n");
                exit(3);
                }
            lines_allocated = new_size;
            }
        words[i] = (char*)malloc(max_line_len);
        if (words[i]==NULL)
            {
            fprintf(stderr,"Out of memory (3).\n");
            exit(4);
            }
        if (fgets(words[i],max_line_len-1,fp)==NULL)
            break;

        for (j=strlen(words[i])-1;j>=0 && (words[i][j]=='\n' || words[i][j]=='\r');j--)

        words[i][j]='\0';
        }
Run Code Online (Sandbox Code Playgroud)

das*_*ght 8

因为在C中,a int可以被解释为使用零/非零规则的布尔值(零表示"假",其他任何意思是"真"),循环将继续,直到break在循环体内到达语句.

你可以重写相同的循环

for (i=0; ;i++)
Run Code Online (Sandbox Code Playgroud)

因为在中间没有条件的情况下,循环将一直持续到一个break.


hac*_*cks 6

什么for (i=0;1;i++)确切呢?

 for (i=0;1;i++)
Run Code Online (Sandbox Code Playgroud)

是一个无限循环,因为1(非零值)的计算结果true,因此在这种情况下,for将成为条件表达式true.

当for循环终止时?

该声明

 if (fgets(words[i],max_line_len-1,fp)==NULL)
        break;  
Run Code Online (Sandbox Code Playgroud)

将在条件true进入时终止循环if.

达到价值后i=1

不,我在上面解释过.

什么时候会发生?

i = 1将在第二次迭代时发生.但这不会终止循环.