You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写老虎机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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:13:34