break语句后分配的值会发生什么?

时间:2017-06-29 17:27:13

标签: c break

这是我某个程序的代码。但是杀死我的事实是,在函数getTotalX中,在for循环的内部 if blocks 中,当标志更新为0 时,在break语句之后,它会更新回1 。为什么会这样?我认为break语句可以帮助我摆脱for循环并直接继续下一个语句。

#include <stdio.h>


int getTotalX(int a_size, int* a, int b_size, int* b){
    int min = a[a_size-1];
    int max = b[0];
    int count = 0;

    for(int i = min; i <= max; i++){
        int flag1 = 1, flag2 = 1;
        for(int j = 0; j < a_size; j++){
            printf("In array a,value of %d mod %d is %d \n",i,a[j],i%a[j] );
            if((i % a[j]) != 0){
                int flag1 = 0;
                printf("flag1 set to 0. Check flag1 = %d\n",flag1);
                break;
            }
        }
        printf("Checkpoint2, value of flag1 = %d\n",flag1);
        if(flag1 != 0){
            for(int k =0; k < b_size; k++){
                printf("In array b,value of %d mod %d is %d \n",b[k],i,b[k]%i );
                if((b[k] % i) != 0){
                    int flag2 = 0;
                    printf("flag2 set to 0. Check flag2 = %d\n",flag2);
                    break;
                }
            }
        }
        printf("Checkpoint3, value of flag2 = %d\n",flag2);


        if((flag1 == 1) && (flag2 == 1)){
            printf("Value of flag1 = %d and flag2 = %d\n",flag1,flag2 );
            printf("%d \n ",i);
            count++; 
        }
    }
    return(count);

}

int main() {
    int n; 
    int m; 
    scanf("%d %d", &n, &m);
    int *a = malloc(sizeof(int) * n);
    for(int a_i = 0; a_i < n; a_i++){
       scanf("%d",&a[a_i]);
    }
    int *b = malloc(sizeof(int) * m);
    for(int b_i = 0; b_i < m; b_i++){
       scanf("%d",&b[b_i]);
    }
    int total = getTotalX(n, a, m, b);
    printf("%d\n", total);
    return 0;
}

所有的印刷声明都是为了帮助我找出出错的地方。我可以改变逻辑以使其工作,但请帮助我理解为什么会发生这种情况?

1 个答案:

答案 0 :(得分:2)

内部int flag1内的if块中声明的for} 是一个不同的变量int flag1。一旦宣布第二个for,前一个{em>阴影并且名称不可访问,直到发生阴影声明的块结束。

int flag1