注册 登录
编程论坛 C语言论坛

求助,为什么有一个scanf会卡住

p1070141149 发布于 2021-12-10 01:08, 1691 次点击
#include<stdio.h>
int main()
{
int c,d;   
scanf("%d",&c);   
int a[20];
for(int i = 0 ; i < c ; i++){
        scanf("%d", &a[i]);   
}
scanf("%d",&d);//就是这个scanf卡住了,不读入数据,也不会继续执行
int b[20];   
for(int j = 0 ; j < d ; j++){
       scanf("%d", &b[j]);   
}
int flag;
int x = 0;
for(int m = 0 ; m < c ; m++){
        flag == 1;
        for(int n = 0 ; n < d ; n++){
            if(a[m] == b[n]){
                flag = 0;
                break;
            }
        }
        if(flag == 1){
            x++;   
    }
    }   
for(int n = 0 ; n < d ; n++){
        flag == 1;
        for(int m = 0 ; m < c ; m++){
            if(b[n] == a[m]){
                flag = 0;   
            break;
            }
        }
        if(flag == 1){
            x++;   
    }
    }
    int k[x];
    x = 0;   
for(int m = 0 ; m < c ; m++){
        flag == 1;   
    for(int n = 0 ; n < d ; n++){
            if(a[m] == b[n]){
                flag = 0;   
            break;
            }
        }
        if(flag == 1){
            k[x] = a[m];
            x++;   
    }
    }
for(int n = 0 ; n < d ; n++){
        flag == 1;
        for(int m = 0 ; m < c ; m++){
            if(b[n] == a[m]){
                flag = 0;   
            break;   
        }
        }
        if(flag == 1){
            k[x] = b[n];
            x++;   
    }
    }
    int i = 0;   
for(; i < x - 1 ; i++){
        flag = 1;        
for(int p = i + 1;p < x;p++){
            if(k[i] == k[p]){
                flag = 0;   
            break;   
        }
        }
        if(flag == 1){
            printf("%d ", k[i]);
        }
    }
    printf("%d", a[i]);
    return 0;
}
5 回复
#2
吹水佬2021-12-10 09:09
scanf("%d", &a[i]); 这个做完才到 scanf("%d",&d);

for(int i = 0 ; i < c ; i++)  // 加多个i<20,for(int i = 0 ; i < 20 && i < c ; i++)
        scanf("%d", &a[i]);   
}
#3
p10701411492021-12-10 12:28
回复 2楼 吹水佬
谢谢,但是好像还是不行。。。而且题目设置的就是c <= 20,所以i < 20肯定成立,,,我加上了一个if(i == c - 1) break;也还是不行。。。
#4
diycai2021-12-10 12:45
你可以在scanf("%d",&c);  后加上一句调试信息 printf("c = %d\n", c);看看c的值是多少,如果c大于21的话,你这个
for(int i = 0 ; i < c ; i++){
        scanf("%d", &a[i]);   
}循环会改变c的值,导致内存泄漏。
#5
p10701411492021-12-10 14:31
回复 4楼 diycai
c没变,,,不过我把for循环里定义i改成了前面跟c和d一起定义,然后就解决了,但是我不知道为什么。。。
#6
liyitong2021-12-11 08:15
程序代码:
        if(flag == 1){
            x++;   
    }
    }
    int k[x];

for(int n = 0 ; n < d ; n++){
        flag == 1;

for(int m = 0 ; m < c ; m++){
        flag == 1;

真是太可怕了——
1