You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:54:17