我只想打印像二维数组一样的一维数组.但是当我运行这个程序时,它没有显示任何输出

rah*_*123 0 c arrays matrix infinite-loop multidimensional-array

#include <stdio.h>

int main()
{
    int arr[20]={7,9,7,8,6,5,3,45,4,4,4,4,4,4,4,4,4,4,4,4};
    int i,j;

    for(i=0;i<3;i++)
    {
        while(i=0)
        {
            for(j=0;j<5;j++)
            {
                printf("%d",arr[j]);         
            }
            printf("\n");
        }
        continue;

        while(i=1)
        {
            for(j=0;j<5;j++)
            {             
                printf("%d",arr[5+j]);        
            }
            printf("\n");       
        }
        continue;

        while(i=2)
        {           
            for(j=0;j<5;j++)
            {          
                printf("%d",arr[10+j]);
            }   
            printf("\n");     
        }
        continue;

        while(i=3)
        {
            for(j=0;j<5;j++)
            {        
                printf("%d",arr[15+j]);
            }
            printf("\n");    
        }   
        continue;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

M O*_*ehm 6

请格式化您的代码.它将帮助我们(以及您)更快地看到代码的作用以及它应该做什么.

您重新格式化的代码如下所示:

#include <stdio.h>

int main()
{
    int arr[20] =
        { 7, 9, 7, 8, 6, 5, 3, 45, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 };
    int i, j;

    for (i = 0; i < 3; i++) {
        while (i = 0) {
            for (j = 0; j < 5; j++) {
                printf("%d", arr[j]);
            }
            printf("\n");
        }
        continue;
        while (i = 1) {
            for (j = 0; j < 5; j++) {
                printf("%d", arr[5 + j]);
            }
            printf("\n");
        }
        continue;
        while (i = 2) {
            for (j = 0; j < 5; j++) {
                printf("%d", arr[10 + j]);
            }
            printf("\n");
        }
        continue;
        while (i = 3) {
            for (j = 0; j < 5; j++) {
                printf("%d", arr[15 + j]);
            }
            printf("\n");
        }
        continue;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有三件事情在这里跳出来:

  • 您在此处使用作业条件.这是合法的C,但它没有按照你的想法做到.代码while (i = 0) ...将零分配给i然后测试该值.零值为false,while未输入循环.
  • 你有困惑whileif.while是一个循环,但你想在这里进行一次检查.
  • continue在每个街区之后.这意味着你跳过循环体的其余部分并直接进入外循环的更新部分,i++.(在这种情况下,这continue是一种祝福,因为它while (i = 1)是一个无限循环.)

您的代码显示"展开开关反模式":当使用外循环的控制变量轻松计算偏移时,您可以编写具有不同硬编码偏移的四个循环i:

#include <stdio.h>

int main()
{
    int arr[20] =
        { 7, 9, 7, 8, 6, 5, 3, 45, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 };
    int i, j;

    for (i = 0; i < 4; i++) {
        for (j = 0; j < 5; j++) {
            printf("%4d", arr[5*i + j]);
        }
        printf("\n");
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(我已将限制修改为i4.确实,如果从零开始计数,则最高有效行数为3,而不是4,但是已经小于已经处理的数量.不需要再次手动减去一个.我还添加了一个字段宽度,printf以便nubers不会相互碰撞.)

  • 当人们解释为什么事情不像预期的那样有效时,我喜欢它,而不仅仅是给出答案!做得好. (2认同)