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

为何使用scanf处理时间输入时分钟值未正确存入C语言变量?

scanf抑制输入冒号失败,分钟变量值异常的问题分析

你的问题出在scanf格式串的语法错误上,以下是具体分析和修正方案:

先看你提供的代码与测试场景:

#include<stdio.h>
#include<string.h>
void main()
{
    int hours_var,minutes_var;
    printf("Whats the time??\n");
    scanf("%d*c%d",&hours_var,&minutes_var);
    printf("%d\n", hours_var);
    printf("%d\n",minutes_var);
}

测试输入:

2:24

输出:

Whats the time??
2:24
2
0

错误原因

你想用*c抑制冒号的输入,但scanf的抑制赋值修饰符必须和%配合使用,正确写法是%*c。你写的%d*c%d中,*c会被当成普通字符匹配规则:scanf读取完第一个整数2后,会尝试匹配输入中的*字符,但你输入的是:,匹配失败,导致后续的%d完全没有执行读取操作,minutes_var保持未初始化的默认值(此处恰好为0)。

修正方案

把格式串改成"%d%*c%d",这样%*c会读取并跳过一个任意字符(这里就是冒号),然后正常读取分钟数:

#include<stdio.h>
#include<string.h>
void main()
{
    int hours_var,minutes_var;
    printf("Whats the time??\n");
    scanf("%d%*c%d",&hours_var,&minutes_var);
    printf("%d\n", hours_var);
    printf("%d\n",minutes_var);
}

如果想更严谨,明确只跳过冒号(避免误跳过其他无关字符),可以写成"%d%*1[:]%d",或者直接用"%d:%d"(这种写法无需抑制符,直接匹配冒号,效果一致)。

测试结果

输入2:24后,输出会变为:

Whats the time??
2:24
2
24

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:42:24