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

scanf("%d-%d-%d")无法运行的原因及预期输入,C语言代码崩溃解析

问题分析与解决

程序崩溃的根本原因

你的程序出现错误码0xC0000005(内存访问违规),核心问题出在scanf的参数传递上:scanf需要接收变量的内存地址来存储读取到的值,但你直接传入了变量名。

正确的scanf调用应该修改为:

scanf("%d-%d-%d", &ore, &minuti, &secondi);

变量前的&是取地址运算符,它会把变量的内存地址传递给scanf,确保读取的值能正确存入对应变量。没加&时,scanf会把变量的随机初始值当作内存地址去写入,直接触发非法内存访问,程序瞬间崩溃,后续的equivalenza函数自然不会执行。

scanf("%d-%d-%d")的预期输入格式

这个格式串要求输入必须严格遵循:

  • 整数 + 无空格减号 + 整数 + 无空格减号 + 整数
    比如你输入的34-32-52完全符合要求,只要修正scanf的参数问题,就能被正确读取。如果输入时减号前后加了空格(比如34 - 32 - 52),格式串需要改成"%d - %d - %d"才能匹配。

额外优化提示

  • 可以添加scanf的返回值判断,验证是否成功读取了3个整数,避免输入错误导致的后续逻辑异常:
    if (scanf("%d-%d-%d", &ore, &minuti, &secondi) != 3) {
        printf("输入格式错误,请按hh-mm-ss格式输入!\n");
        return 1;
    }
    
  • 注意equivalenza函数中修改的是参数的副本,不会影响主函数里的原变量,不过当前场景下仅用于计算输出,所以无需调整;如果需要修改主函数的变量值,需要传递变量地址并使用指针操作。

内容的提问来源于stack exchange,提问作者sashax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:35:53