C语言实现4列ASCII表 非满末行制表符缺失问题求解
4列ASCII码表生成程序的格式问题求助
这是我首次发帖,先明确开发需求如下:
- 编写程序生成4列(单元格)宽的ASCII码表
- 码表包含预设范围的ASCII十进制值,无需使用
scanf获取输入 - 取值范围可参考示例:40-56、95-107、20-27
- 列分隔规则:列与列之间使用制表符分隔,满4列的完整行末尾不得添加制表符;仅最后一行可能出现不足4列的非完整行,这类行的所有单元格后都需要添加制表符
- 单元格内容规则:每个单元格需展示对应ASCII值的十进制数、十六进制数,可打印字符直接输出原字符,不可打印字符输出
?代替 - 实现限制:仅允许使用
if判断、for/while循环等基础语法实现。
现有实现代码
目前我编写的代码已经实现需求1、2、3、5,仅部分满足需求4,代码如下:
#include <stdio.h> #include <ctype.h> #include <string.h> int main() { int min=28; // 定义ASCII十进制取值范围起点 int max=40; // 定义ASCII十进制取值范围终点 int i, j; // 行列遍历变量 for(i=min; i<=max; i=i+4) // 按每行4个单元格的宽度逐行生成 { for(j=i; j<=i+2 && j<max; j++) // 输出当前行前3个单元格 { if(isprint(j)){ // 可打印字符直接输出原字符,不可打印字符输出? printf("%3d 0x%02x %c\t", j, j ,j); }else { printf("%3d 0x%02x ?\t",j, j); } } if(isprint(j+3)) // 输出当前行最后一个单元格 { printf("%3d 0x%02x %c", j, j ,j); }else { printf("%3d 0x%02x ?",j, j); } printf("\n"); // 单行输出完成后换行,进入下一行生成逻辑 } return 0; }
运行结果与现存问题
当设置取值范围为28-40时,程序运行输出如下:
28 0x1c ? 29 0x1d ? 30 0x1e ? 31 0x1f 32 0x20 33 0x21 ! 34 0x22 " 35 0x23 # 36 0x24 $ 37 0x25 % 38 0x26 & 39 0x27 ' 40 0x28 (
当前问题:输出格式98%符合预期,完整4列行末尾无制表符的逻辑正确,但最后一行仅包含值为40的单个单元格,属于非完整行,该单元格后缺少应有的制表符。
求助目标
需要可行的修改方案:如何判断最后一行是否为不足4列的非完整行,在非满行的最后一个单元格后补充制表符,同时不破坏满行无末尾制表符的原有逻辑。
内容的提问来源于stack exchange,提问作者blizzard16
相关产品推荐
相关产品推荐

