couM 2021-07-14 16:06 采纳率: 62.5%
浏览 32
已采纳

为什么只能输入不能打印?

int count[10]={count[0]=0};
int x;
int t=0;

scanf("%d",&x);
while(x!=-1){
    scanf("%d",&x);
    count[x]++;
}
for(t=0;t<10;t++){
    printf("%d出现了%d次\n",t,count[t]);
}
return 0;
  • 写回答

2条回答 默认 最新

  • 八云黧 2021-07-14 16:16
    关注

    你这个问题可太妙了,值得专门写一篇博文记录下来。
    x的地址正好是count的地址-1,当你x=-1时,count[-1]++正好是让x++变成0,反而通过了while的判断条件继续下一次循环
    (C语言不会对数组下标为负数进行检查,因为数组的本质是一组元素的第一个元素指针,所以count[-1]和*(count-1)是一样的,而内存分配空间正好让x和count排列在一起,导致x从-1自增到0)
    解决方案很简单,加一个判断就行了

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 7月14日
  • 创建了问题 7月14日