嵌套for循环改进

时间:2016-11-14 17:35:37

标签: c arrays for-loop

我正在尝试制作一个包含最多63个数组的程序。用户指定数组的实际活动位置,它们的起始值均为0。

我想: 扫描阵列的活动位置以及位于:0 + 4 * n和3 + 4 * n(其中n = 0,1,2,3,4,((总计-5)/ 4)的位置如果值为0,如果是,则使其为1。 对于前一次搜索中未包含的阵列的最后5个活动位置,我将只检查阵列的五个位置中的第一个和最后一个。如果值为0,则将其设为1。 在所有情况下,我只想一次更改仅一个值。如果找到零,则给出值1然后停止。 如果上述值均不为0 - >有错误信息。

我的问题出在最后一部分,错误消息在其他if语句激活时开始运行..

#include <stdio.h>
int main(void)
{
    int array[63];
    int i,n,total;
    char selection;

    for (i=0; i<63; i++)
        array[i] = 0;
    printf("Enter active array places (maximum 63):");
    scanf(" %d",&total);

    do{
        printf("0.Exit \n");
        printf("1.List array \n");
        printf("2.Change value of array: \n");
        scanf(" %c",&selection);

        if (selection=='1')
            {   
                for (i=0; i<total; i++)
                    printf("%d \n", array[i]);
            }

        else if (selection=='2')
            {
                for (i=0; i<(total); i++)
                    {
                    if ((i%4==0) && i<(total-5)&&(array[i]==0))
                                    {
                                        array[i]=1;
                                        printf("You changed array value in place %d, ",i);

                                        break;
                                    }


                                else if ((i%4==3)&&i<(total-5)&&(array[i]==0))
                                    {
                                        array[i]=1;
                                        printf("You changed array value in place %d, ",i);

                                        break;
                                    }
                                else if (i==(total-5)&&(array[i]==0))
                                    {
                                        array[i]=1;
                                        fprintf("You changed array value in place %d, ",i);
                                        i=n=total+1;
                                        break;
                                    }
                                else if (i==(total-1)&&(array[i]==0))
                                    {
                                        array[i]=1;
                                        printf("You changed array value in place %d, ",i);
                                        i=n=total+1;
                                        break;
                                    }
                                else
                                    printf("Nothing to change");

                            }
                    }
            }
    } while (selection!='0');
}

1 个答案:

答案 0 :(得分:0)

您的代码比需要的要复杂一些(请参阅@Barmar的评论)。

但是,如果我们使用您当前的代码,处理错误消息的一种方法是将打印输出循环并使用变量来记住某些内容是否已更改。

类似的东西:

int item_changed = 0;  // In the start of the code before the for-loop

if ((i%4==0) && i<(total-5)&&(array[i]==0))
{
    array[i]=1;
    printf("You changed array value in place %d, ",i);
    item_changed = 1; // Add this in all 4 places where you change the array
    break;
}

删除此部分

else
    printf("Nothing to change");

并将其放在for循环之后。

if (item_changed == 0)
    printf("Nothing to change");