为什么不能正常工作而且没有读取输入?

时间:2015-01-30 11:05:22

标签: c

我有这个代码,简单而无问题,似乎这里的一切都很好,但是当我运行它时,它会显示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;
}

1 个答案:

答案 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);

这没有意义,所以把你的代码放在一起并不像你想象的那样好。