为什么使用变量而不是数组导致C中的sigsegv故障?



我正在尝试用和不使用数组来解决这个问题。

问题:

如果一周内晴天的天数严格大于雨天的天数,则Chefland的天气报告为Good。

样本输入:

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("Yesn") : printf("Non");
}
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("Yesn") : printf("Non");
}
return 0;
}

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

第二个代码段的scanf用法是错误的。

scanf("%d",a);

应该是

scanf("%d",&a);

最新更新