为什么在C中使用变量而不是数组会导致sigsegv错误?[已关闭]

6tqwzwtp  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(112)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我尝试使用和不使用数组来解决这个问题。
问题:
如果一周晴天的天数严格大于雨天的天数,那么谢夫兰的天气报告是好的。
样品输入:

4            
1 0 1 0 1 1 1
0 1 0 0 0 0 1
1 1 1 1 1 1 1
0 0 0 1 0 0 0

其产出:

YES
NO
YES
NO

当我使用数组来存储所有的值时,它是有效的。但是当我使用单个变量时,它会抛出一个sigsegv错误。
使用数组的代码:

#include <stdio.h>
#define max 7
int main(void) {
    int T,Arr[max];
    scanf("%d",&T);
    while(T--)
    {
        int sun=0, rn=0;
        for(int i=0;i<max;++i)
        {
            scanf("%d",&Arr[i]);
            Arr[i]==0 ? ++rn : ++sun;
        }
        sun>rn?printf("Yes\n") : printf("No\n");
    }
    return 0;
}

使用导致sigsegv的变量的代码:

#include <stdio.h>
#define max 7
int main(void) {
    int T,a;
    scanf("%d",&T);
    while(T--)
    {
        int sun=0, rn=0;
        for(int i=0;i<max;++i)
        {
            scanf("%d",a);
            a==0 ? ++rn : ++sun;
        }
        sun>rn?printf("Yes\n") : printf("No\n");
    }
    return 0;
}

我的理解是,因为'a'是一个整型变量,所以每次执行scanf时,它都应该存储新的值,然后执行下一个操作,这样我就不必使用数组来浪费更多的内存。但它抛出了sigsegv。不知道为什么。

jv4diomz

jv4diomz1#

在第二个代码段中,scanf用法错误。

scanf("%d",a);

应该是

scanf("%d",&a);

相关问题