这要看你输入什么了。
有一个要点:scanf()的返回值是它成功读入值的个数。
如果你第一次输入一个整数,那么第一个scanf函数会成功读入一个整数,它的返回值就是1,即ret的值是1。那么for循环的关系表达式:ret!=1就不成立,整个循环就不会执行,程序直接停止。
如果你第一次输入了非整数,那么第一个scanf函数成功读入的值就是0,它返回0,即ret=0。此时for循环的关系表达式:ret!=1成立,for循环才会开始迭代。
如果你的程序执行的时候一直在打印,不给你输入的机会,说明你清空输入缓冲区的函数fflush没起作用,缓冲区里保存的第一次非法输入一直都在。
你把
fflush(stdin);
改成:
while(getchar()!='\n');
就好了。