请问为什么会出现这样的问题?

如果输入的x比较小,它就会输出2x
符合程序

但是一旦x的值很大,那要么就不是2x,要么就是负一
不符合程序。

img

确实,输入得数字足够大之后,scanf稳定得将-1 保存在int类型中
搜了一圈资料,暂时没有找到权威说法,
我盲猜一下原因:
因为scanf是按照字符串的方式从控制台读取内容,然后再根据格式化字符转为指定的类型,最后保存到指定的变量中
所以,
当输入的数字足够大,比溢出为负数还要大,那么可能转为整数的那个步骤(估计是调用函数)处理不了,返回了-1,然后scanf把这个-1当作转换结果了

接下来我去看一下scanf的实现过程,如果不对的话我再更新

因为这是int类型,最大只能有20亿左右的数据,否则会出错int不行

int溢出了