我有这个代码,简单而无问题,似乎这里的一切都很好,但是当我运行它时,它会显示0到99之间的数字(首先应该读取一些输入)。这有什么不对?
#include <stdio.h>
int main(){
int N;
int schools[98];
char string[20];
int number;
scanf("%d", &N);
int i;
for(i=0; i<=99; ++i) schools[i] = 0;
for(i=0; i<N; ++i){
scanf("%s", string);
scanf("%s", string);
scanf("%d", number);
schools[number]++;
}
int min = N;
for(i=0; i<=99; ++i) if(schools[i] < min)
min = schools[i];
for(i=0; i<=99; ++i){
if(schools[i] == min) printf("%d, ", i);
}
return 0;
}
答案 0 :(得分:2)
for(i=0; i<=99; ++i) schools[i] = 0;
出站访问的数组。 UB
scanf("%d", number);
number
永远不会被初始化,所以这是UB。
它应该是
scanf("%d", &number);
扫描到变量的地址。
scanf("%s", string);
scanf("%s", string);
这没有意义,所以把你的代码放在一起并不像你想象的那样好。