C语言scanf使用%d/%d格式仅输入1个整数为何输出不确定值?
问题原因
- 你使用的
scanf格式串为%d/%d,要求输入必须匹配「整数/整数」的格式。当你仅输入12时,scanf仅成功匹配到第一个整数,只会给变量x赋值为12,不会对变量y做任何赋值操作。 - C语言中函数内部定义的局部变量如果没有显式初始化,它的初始值是未定义行为:变量会直接复用对应内存地址中之前遗留的任意数据。你本次运行时
y对应的栈内存地址中刚好遗留的值为16,所以输出时就会打印16。这个值是完全不确定的,更换编译环境、甚至同环境多次运行都可能得到不同的结果。
补充建议
- 定义局部变量时建议同时初始化,比如修改为
int x = 0, y = 0;,此时如果scanf没有给y赋值,y也会保留明确的初始值0,不会出现随机值。 - 可以通过
scanf的返回值判断输入是否符合预期:scanf会返回成功完成赋值的变量个数,你可以加判断逻辑:
if (scanf("%d/%d", &x, &y) != 2) { printf("输入格式错误,请按照 整数/整数 的格式输入"); return 1; }
- 你当前的代码里
return 0后缺少分号,编译时会报错,需要补上改为return 0;。
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

