C语言printf无法打印整数k 奇数生成程序输出错误排查
异常原因
- 核心bug是
printf格式占位符和传入参数数量不匹配:你的提示输出语句printf("Bilangan genap dari 0 sampai %i adalah :\n");中使用了%i作为整数输出占位符,但没有将需要打印的变量k作为参数传入该printf调用。 printf是C语言的可变参数函数,出现上述参数缺失时不会自动补值,而是会直接从调用栈的对应内存位置读取随机数据,属于未定义行为,这就是你看到输出异常数字、和输入的k值不一致的根本原因。- 额外笔误:代码开头注释写的是奇数生成程序,但实际函数逻辑、交互提示都是输出0到k的偶数,属于注释和实际功能不符,不影响运行但建议同步修正。
- 这类问题可以在编译时开启
-Wall警告参数,编译器会直接提示占位符和参数不匹配的报错,提前在编译阶段定位问题,不用等到运行时排查。
修复方法
只需要在对应printf调用的参数列表末尾补上变量k即可,修复后的完整可运行代码如下:
#include <stdio.h> #include <stdlib.h> // even number generator with int k as the max number void genap_generator(){ int k; printf("Masukkan batas bilangan genap = "); scanf("%i", &k); // 补传k作为printf参数,匹配%i占位符 printf("Bilangan genap dari 0 sampai %i adalah :\n", k); for (int i=0; i<=k; i+=2){ printf("%i\n", i); } } int main(){ genap_generator(); system("pause"); return 0; }
内容的提问来源于stack exchange,提问作者Abdurrahman al hakim
相关产品推荐
相关产品推荐

