gpt4 book ai didi

C程序从数组中打印出LCD数字

转载 作者:行者123 更新时间:2023-11-30 15:32:30 24 4
gpt4 key购买 nike

很抱歉,如果这是重复的问题。但这一次我想弄清楚我的问题以及我希望我的输出如何。我接到一个项目,创建一个 C 程序,从数组列表中打印出 LCD 数字显示数字,这些数字将输出到文本文件中。我是这方面的新手,希望你能帮助我。它应该打印 12 元素,而不是普通的 7 元素 LCD 显示屏,如下图所示:

这是我的代码:

    #define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#define COL 12
#define ROW 10

int main(void)
{
int i, j;
const int arr2 [ROW][COL] = {{1,1,1,0,0,0,1,1,1,0,1,1}, //0
{0,0,0,0,1,0,0,0,0,1,0,0}, //1
{1,1,0,1,0,1,1,1,1,0,1,0}, //2
{1,1,0,1,0,1,1,0,1,0,1,1}, //3
{0,0,1,1,0,1,1,0,0,0,0,1}, //4
{1,1,1,1,0,1,0,0,1,0,1,1}, //5
{1,1,1,1,0,1,0,1,1,0,1,1}, //6
{1,1,1,0,0,0,1,0,0,0,0,1}, //7
{1,1,1,1,0,1,1,1,1,0,1,1}, //8
{1,1,1,1,0,1,1,0,1,0,1,1}}; //9


/* The print functions should go here.
If array = 1, it should print out either this: _ or |
to print out the digital numbers.
Else, if array = 0, it will print out nothing */

这是我尝试的代码,但失败了。我没有完成代码,因为它无法正常工作。我在 for 循环中使用了 if 语句。所以我很困惑,我需要你的帮助。

for (i = 0; i < (sizeof(arr2)/sizeof(arr2[0][0])/COL); i++)
{
if (arr2[i][0] == 1)
{
printf("| ");
} else if (arr2[i][0] == 0)
{
printf("\t");
}

if (arr2[i][1] == 1)
{
printf("|");
} else if (arr2[i][1] == 0)
{
printf("\t\n");
}

if (arr2[i][2] == 1)
{
printf("|");
} else if (arr2[i][2] == 0)
{
printf("\t");
}

if (arr2[i][3] == 1)
{
printf("|");
} else if (arr2[i][3] == 0)
{
printf("\t");
}

if (arr2[i][4] == 1)
{
printf("|");
} else if (arr2[i][4] == 0)
{
printf("\t");
}

if (arr2[i][5] == 1)
{
printf("|");
} else if (arr2[i][5] == 0)
{
printf("\t");
}

if (arr2[i][6] == 1)
{
printf("|");
} else if (arr2[i][6] == 0)
{
printf("\t");
}

if (arr2[i][7] == 1)
{
printf("|");
} else if (arr2[i][7] == 0)
{
printf("\t");
}

if (arr2[i][8] == 1)
{
printf("|");
} else if (arr2[i][8] == 0)
{
printf("\t");
}

if (arr2[i][9] == 1)
{
printf("|");
} else if (arr2[i][9] == 0)
{
printf("\t");
}

if (arr2[i][10] == 1)
{
printf("|");
} else if (arr2[i][10] == 0)
{
printf("\t");
}

if (arr2[i][11] == 1)
{
printf("|");
} else if (arr2[i][11] == 0)
{
printf("\t");
}

for (j = 0; j < (sizeof(arr2)/sizeof(arr2[0][0])/ROW); j++)
{
if (arr2[0][j] == 1)
{
printf("_");
} else if (arr2[0][j] == 0)
{
printf("\t");
}

if (arr2[1][j] == 1)
{
printf("_");
} else if (arr2[1][j] == 0)
{
printf("\t");
}

if (arr2[2][j] == 1)
{
printf("_");
} else if (arr2[2][j] == 0)
{
printf("\t");
}
}


return 0;
}

编译时,它一直显示: arrays error感谢您的时间和帮助!

最佳答案

12 个段中的每一个都由 -| 表示;你应该有一个数组(字符串?)来标识当该段“点亮”时要打印的正确字符。当某个段未亮起时,您应该打印空白而不是制表符。您的数组名称 (arr2) 的信息并不丰富。

从表面上看,代码可能是这样的:

char segment[] = "--|||--|||--";

for (int digit = 0; digit < 10; digit++)
{
for (int segnum = 0; segnum < 12; segnum++)
{
if (arr2[digit][segnum] == 1)
putchar(segment[segnum]);
else
putchar(' ');
if (segnum == 1 || segnum == 4 || segnum == 6 || segnum == 9 || segnum == 11)
putchar('\n');
}
}

当需要换行符时,还有其他可能更好的编码方式。如果您发现自己一遍又一遍地编写几乎相同的代码(如小范围内的 if (segnum == 1 …) 行,或较大规模的打印代码中),那么您可能做错了。

但是,如果仔细查看数字 0、1 和 2,您会发现每个数字都是打印位置的 5x5 矩阵(其中我使用 x 来强调需要打印的点)处理)。顶部的最后一个字符显示 12 个段的位置;这里的 x 永远是空白(根据我的演示方案,这并不是您想要的)。

x-x-x    xxxxx    x-x-x               x-x-x
|xxx| xx|xx xxxx| |x|x|
xxxxx xxxxx x-x-x x-x-x
|xxx| xx|xx |xxxx |x|x|
x-x-x xxxxx x-x-x x-x-x

- - - - - -
| | | | | | |
- - - -
| | | | | | |
- - - - - -

请注意,如果您使用 _ 而不是 -,您会得到奇怪的效果。在解释 1 时,我使用了两个垂直部分。您必须定义想要的输出以获得您想要的结果。

<小时/>

可行的代码

此解决方案包含 5 个数组:数据数组的错误修复版本、上面显示的用于显示字形的字符串、标识字形在 5x5 网格中出现的位置 (x, y) 的两个数组,以及包含显示数据的 5x5 字符矩阵。显示设置为全部空白,然后代码使用其他数组将正确的字符放置在当前数字的正确位置。通常,我会使用一个结构体数组而不是 3 个数组,但如果您刚刚学习数组,您可能还没有涉及结构体。

/* SO 24233419 - 12-segment LCD digits */
/* Assuming no structures - simplifying assignment to display[y][x] */
#include <stdio.h>
#include <string.h>

enum { COL = 12 };

int main(void)
{
const int lcd_segment[][COL] =
{
{ 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1 }, // 0
{ 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, // 1
{ 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1 }, // 2
{ 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1 }, // 3
{ 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0 }, // 4
{ 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1 }, // 5
{ 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1 }, // 6
{ 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0 }, // 7
{ 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1 }, // 8
{ 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1 }, // 9
};

const char segment_c[] = "--|||--|||--";
const char segment_x[] = { 1, 3, 0, 2, 4, 1, 3, 0, 2, 4, 1, 3 };
const char segment_y[] = { 0, 0, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4 };

char display[5][5];

for (int digit = 0; digit < 10; digit++)
{
memset(display, ' ', sizeof(display));
for (int segnum = 0; segnum < 12; segnum++)
{
if (lcd_segment[digit][segnum] == 1)
{
int x = segment_x[segnum];
int y = segment_y[segnum];
display[y][x] = segment_c[segnum];
}
}
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
putchar(display[y][x]);
putchar('\n');
}
}

return 0;
}

输出:

 - - 
| |

| |
- -

|

|

- -
|
- -
|
- -
- -
|
- -
|
- -

| |
- -
|

- -
|
- -
|
- -
- -
|
- -
| |
- -
- -
|

|

- -
| |
- -
| |
- -
- -
| |
- -
|
- -

关于C程序从数组中打印出LCD数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24233419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com