分析:7段显示器显示数字,首先了解7段显示器。简单来说是把每个数字分为7段,每段显示或者不显示构成了0~9数字。
问题简化:先能用7段表示数字8(每段都显示),如何表示?回车换行加空格,发现换行后行与行间隔太大不利于展示。参考百度知道看到用字符数组实现展示的。数字分为三行三列,第一行位‘_’,第二行从左到右为'|','_','|',同理第三行为'|','_','|'。这样输出模型做好了。还有一个问题,每段显示与不显示的问题。我们可以给每个字段标记,显示为1,不显示为0.建立另一整型数组记录每个数字的每段的显示与否,每次输入一个数字就进行配对,把配对结果输出到屏幕。
源代码如下:
#include<stdio.h>
#define MAX_DIGIT 10 /*the count of number*/
const int segment[10][7]={
{1,1,1,1,1,1,0},//0
{0,1,1,0,0,0,0},//1
{1,1,0,1,1,0,1},//2
{1,1,1,1,0,0,1},//3
{0,1,1,0,0,1,1},//4
{1,0,1,1,0,1,1},//5
{1,0,1,1,1,1,1},//6
{1,1,1,0,0,0,0},//7
{1,1,1,1,1,1,1},//8
{1,1,1,1,0,1,1}//9
};
//printf the digit of 8,three row four column.last column is space.
char ch;
char display[3][4*MAX_DIGIT]={' '};//empty char use blank space;
int main(){
//printf the digit of 8,three row four column.last column is space.
char ch;
int i,j,cnt=0;
void segmentMatch(int num,int byValue);
printf("请输入数字:");
while(ch=getchar()){
if(cnt<10&&ch>='0'&&ch<='9'&&ch!='\n'){
segmentMatch(ch-'0',cnt++);
//printf the digit
}else{
break;
}
}
for(i=0; i<3; i++)
{
for(j=0; j<MAX_DIGIT*4; j++)
{
putchar(display[i][j]);
}
putchar('\n');
}
}
void segmentMatch(int num,int byValue){
int position=byValue*4; //the location is changing
//match the array
if(segment[num][0]){
display[0][position+1]='_';
// printf("%c\n",display[0][1]);
}
if(segment[num][1]){
display[1][position+2]='|';
}
if(segment[num][2]){
display[2][position+2]='|';
}
if(segment[num][3]){
display[2][position+1]='_';
}
if(segment[num][4]){
display[2][position+0]='|';
// printf("%c\n",display[2][0]);
}
if(segment[num][5]){
display[1][position+0]='|';
}
if(segment[num][6]){
display[1][position+1]='_';
}
}
参考百度知道:https://zhidao.baidu.com/question/1431802657412741019.html?fr=iks&word=%C6%DF%B6%CE%CF%D4%CA%BE%C6%F7&ie=gbk