如何使用putchar函数打印0到20及更大范围的数字?
使用putchar打印多位数的解决方案
你遇到的问题核心是:putchar只能输出单个ASCII字符,当你用'0' + n时,只有n在0-9范围内,结果才对应数字字符'0'-'9';n>=10时,'0' + n会变成其他ASCII字符(比如'0'+10是':'),自然无法正确显示数字。
要打印大于9的数字,必须把多位数拆分成单独的每一位,再逐个用putchar输出。下面提供两种常用实现方式:
方法1:递归拆分(代码简洁)
递归的思路是先处理高位数字,再输出当前个位,比如打印20时,先递归处理2,再打印0:
#include <stdio.h> void print_num(int num) { // 先处理高位:如果num大于等于10,先打印高位部分 if (num / 10 != 0) { print_num(num / 10); } // 打印当前个位 putchar('0' + num % 10); } int main() { for (int i = 0; i <= 20; i++) { print_num(i); putchar(' '); // 加空格分隔数字 } return 0; }
方法2:循环拆分(非递归,适合避免递归深度问题)
如果要打印极大的数字(比如超过递归栈深度的范围),可以用循环拆分每一位,存入数组后逆序输出(因为取余得到的是从个位开始的数字):
#include <stdio.h> void print_num(int num) { // 特殊处理0:避免循环不执行导致无输出 if (num == 0) { putchar('0'); return; } int digits[20]; // 足够存储int范围内的所有数字位数 int count = 0; // 拆分每一位,从个位开始存入数组 while (num > 0) { digits[count++] = num % 10; num = num / 10; } // 逆序输出数组,得到正确的数字顺序 for (int i = count - 1; i >= 0; i--) { putchar('0' + digits[i]); } } int main() { for (int i = 0; i <= 20; i++) { print_num(i); putchar(' '); } return 0; }
扩展:处理负数
如果需要打印负数,只需先输出'-'符号,再处理绝对值部分:
void print_num(int num) { if (num < 0) { putchar('-'); num = -num; // 转为正数处理 } // 后续逻辑同上面的递归或循环代码 }
内容的提问来源于stack exchange,提问作者ben_code
相关产品推荐
相关产品推荐

