使用printf输出-858993460而非变量值的问题求助
问题分析与解决方案
你的代码问题出在printf格式字符串与传入变量数量不匹配,导致读取到栈中未初始化的垃圾值。
具体错误点
看你的printf语句:
printf("#briefjes van 500 euro: %d\n#briefjes van 200 euro: %d\n#briefjes van 100 euro: %d\n#briefjes van 50 euro: %d\n#briefjes van 20 euro: %d\n#briefjes van 10 euro: %d\n#briefjes van 10 euro: %d\n#briefjes van 5 euro: %d\n#munten van 2 euro: %d\n#munten van 1 euro: %d\n", briefjes500, briefjes200, briefjes100, briefjes50, briefjes20, briefjes10, briefjes5, munten2, munten1);
- 格式字符串里有10个
%d占位符,但你只传入了9个变量 - 重复写了一行
#briefjes van 10 euro: %d,导致最后一个#munten van 1 euro: %d没有对应的变量,只能读取栈中随机的未初始化数据(即你看到的-858993460,这是VS环境下未初始化int的默认值0xCCCCCCCC的十进制表示)
修正后的代码
把重复的10欧元纸币输出行改成5欧元的,让占位符和变量一一对应:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main(void) { int totaalGeld, briefjes500, briefjes200, briefjes100, briefjes50, briefjes20, briefjes10, briefjes5, munten2, munten1, rest; printf("Geef een hoeveelheid geld: "); scanf("%d%*c", &totaalGeld); briefjes500 = totaalGeld / 500; rest = totaalGeld % 500; briefjes200 = rest / 200; rest = rest % 200; briefjes100 = rest / 100; rest = rest % 100; briefjes50 = rest / 50; rest = rest % 50; briefjes20 = rest / 20; rest = rest % 20; briefjes10 = rest / 10; rest = rest % 10; briefjes5 = rest / 5; rest = rest % 5; munten2 = rest / 2; munten1 = rest % 2; printf("#briefjes van 500 euro: %d\n" "#briefjes van 200 euro: %d\n" "#briefjes van 100 euro: %d\n" "#briefjes van 50 euro: %d\n" "#briefjes van 20 euro: %d\n" "#briefjes van 10 euro: %d\n" "#briefjes van 5 euro: %d\n" "#munten van 2 euro: %d\n" "#munten van 1 euro: %d\n", briefjes500, briefjes200, briefjes100, briefjes50, briefjes20, briefjes10, briefjes5, munten2, munten1); return 0; }
关键说明
C语言的printf不做参数数量校验,当占位符多于传入的变量时,会从栈中读取额外的随机数据。确保每个%d都有对应的变量,就能正常输出内存中的实际值。
内容的提问来源于stack exchange,提问作者user27518041
相关产品推荐
相关产品推荐

