编写老虎机C程序时,scanf函数导致程序崩溃的原因?
为什么我的C语言老虎机程序执行
scanf时会崩溃? 嘿,这个问题绝对是C语言新手最常踩的坑之一!你的程序崩溃的核心原因其实很直白:scanf需要接收变量的内存地址,而你直接传递了变量本身的值。
详细拆解原因:
在C语言里,scanf的%d格式化说明符要求对应的参数是int*类型(也就是整数变量的内存地址)——只有拿到地址,它才能把用户输入的数值写入到这个地址对应的内存空间里。
你写的代码片段是:
scanf("%d", decision); if (decision == 1)
这里你传给scanf的是decision的当前值(如果没提前初始化,这会是一个随机的垃圾值),scanf会把这个随机值当成内存地址去尝试写入数据,这属于典型的非法内存访问,操作系统会直接终止程序来保护内存安全,也就是你看到的"崩溃"现象。
修正后的代码:
只需要在decision前面加上取地址符&,把变量的内存地址传递给scanf就可以解决问题:
scanf("%d", &decision); if (decision == 1)
给新手的小提醒:
- 养成初始化变量的好习惯,比如先写
int decision = 0;,避免未初始化变量带来的随机值隐患。 - 使用
scanf时一定要对应好格式符和参数类型:比如%d对应int*(需要加&),%s对应字符串数组(本身就是地址,无需加&),%f对应float*(同样需要加&)。
内容的提问来源于stack exchange,提问作者Silenite
相关产品推荐
相关产品推荐

