C语言printf无法打印字符数组,求助实现补0三位递增数输出
问题分析与修复方案
核心问题
- 数字转字符逻辑错误:你直接将整数数字强制转换为
char,比如数字0会被转为ASCII码为0的空字符(不可见),而非字符'0'。正确的转换方式是给数字加上'0'的ASCII值,这样整数0-9才能对应到字符'0'-'9'。 - 外层循环变量被意外篡改:内层循环中直接对
i执行i /= 10操作,这会破坏外层循环的计数器,导致循环迭代逻辑完全混乱。必须使用临时变量保存当前i的值,再对临时变量进行数字拆解操作。
修正后的代码
#include <stdio.h> #include <cs50.h> int main(void) { char s[4]; s[3] = '\0'; int nums[3] = {0, 0, 0}; for (int i = 92; i < 110; i++) { // 用临时变量保存当前i,避免修改外层循环计数器 int temp = i; // 拆解数字到nums数组 for (int j = 0; j < 3; j++) { nums[2 - j] = temp % 10; temp /= 10; } // 转换为对应字符 for (int k = 0; k < 3; k++) { s[k] = nums[k] + '0'; } printf("%s\n", s); } }
修正后的代码会输出从092到109的三位数字,高位自动补0,完全符合你的预期。
内容的提问来源于stack exchange,提问作者JmsChf
相关产品推荐
相关产品推荐

