C语言中如何构建嵌套数组?LCD格式数字显示代码问题求助
问题分析与修正代码
你的代码核心问题出在lcd数组的结构设计、字符串格式定义以及打印逻辑上,以下是修正后的完整代码,再逐一说明问题:
#include <stdio.h> int main(){ int a, b, c, d; printf("Enter 4 digit number:\n"); scanf("%1d%1d%1d%1d", &a, &b, &c, &d); int digit[4] = {a, b, c, d}; // 每个数字的LCD样式:4行,每行3个字符(不含换行) char zero[4][4] = { " _ ", "| |", "|_|", " " }; char one[4][4] = { " ", " |", " |", " " }; char two[4][4] = { " _ ", " _|", "|_ ", " " }; char three[4][4] = { " _ ", " _|", " _|", " " }; char four[4][4] = { " ", "|_|", " |", " " }; char five[4][4] = { " _ ", "|_ ", " _|", " " }; char six[4][4] = { " _ ", "|_ ", "|_|", " " }; char seven[4][4] = { " _ ", "| |", " |", " " }; char eight[4][4] = { " _ ", "|_|", "|_|", " " }; char nine[4][4] = { " _ ", "|_|", " _|", " " }; // lcd数组:索引对应数字0-9,每个元素指向对应数字的4行样式 char (*lcd[10])[4] = {zero, one, two, three, four, five, six, seven, eight, nine}; // 打印逻辑:按行打印,先打印所有数字的第1行,再第2行... for(int row = 0; row < 4; row++){ for(int num_idx = 0; num_idx < 4; num_idx++){ printf("%s ", lcd[digit[num_idx]][row]); } printf("\n"); } return 0; }
关键修改点说明
修正
lcd数组结构
你原来的lcd数组类型和层级完全错误,正确设计应为:lcd[数字]指向该数字的4行样式,所以类型定义为char (*lcd[10])[4]——这是一个包含10个元素的数组,每个元素是指向char[4]的指针,对应每个数字的一行字符。统一字符串格式
去掉了每个字符串里的\n,换行由打印逻辑统一控制,避免单个数字的行提前换行导致排版混乱。同时修正了one的错误字符串定义,确保每行是3个字符的有效样式。调整打印循环逻辑
原循环是先打印一个数字的所有4行再处理下一个,导致数字垂直排列。现在改为按行遍历,每行打印4个数字的对应行,实现LCD式的横向数字显示。简化digit数组初始化
直接用int digit[4] = {a, b, c, d};替代逐个赋值,代码更简洁。
内容的提问来源于stack exchange,提问作者Pinchy
相关产品推荐
相关产品推荐

