为什么要用short 为什么换成int没有输出值

img

for(int i=0;input[i] !=-1;i++)
{
scanf_s("%d",&input[i]);
}
这段代码不对,i=0的时候,input[0] !=-1成立,执行scanf_s("%d",&input[i]); 这时候给input[0]重新赋值,然后 i++
然后判断 input[i] != -1,这时候input[1]的值是0,也就是for循环会无限循环下去,会导致数组越界。
修改为:

for(int i=0;;i++)
{
    scanf_s("%d",&input[i]);
    if(input[i] ==-1)
        break;
}

你从哪里开始换成short啊?是函数还是main中的数组定义

没有输出是程序一直在等你输入。当你输入到10000个的时候就有输出了。
因为:
for(int i = 0;input[i] != 0;i++)
{
scanf_s();
}
由于你初始化的是0他不等与-1;所以进入for循环。你的sanf_s()输入的值是i的值。等下次执行判断的时候i变成了i+1。这个时候他的值还是0.
因为你是先判断的值。然后才改变的值。所以你输入-1也不会跳出循环。