You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

87 lines
1.7 KiB

#include <stdio.h>
#include <ctype.h>
#define MAX_DIGITS 10
char digits[3][MAX_DIGITS * 4];
const int segments[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
};
void clear_digits_array(void);
void process_digit(int digit, int position);
void print_digits_array(void);
int main(void) {
clear_digits_array();
int i;
char ch;
printf("Enter a number: ");
for (i = 0; i < MAX_DIGITS; ) {
ch = getchar();
if (isdigit(ch)) {
process_digit(ch - '0', i);
i++;
}
}
print_digits_array();
return 0;
}
void clear_digits_array(void) {
int r, c;
for (r = 0; r < 3; r++)
for (c = 0; c < MAX_DIGITS * 4; c++)
digits[r][c] = ' ';
}
void process_digit(int digit, int position) {
int r, c;
for (c = position * 4; c < (position * 4 + 4); c++) {
// In first row, everywhere but top of certain digits is a space
r = 0;
if (c % 4 == 1 && segments[digit][0])
digits[r][c] = '_';
// In second row
r = 1;
if ((c % 4 == 0 && segments[digit][5]) ||
(c % 4 == 2 && segments[digit][1]))
digits[r][c] = '|';
else if (c % 4 == 1 && segments[digit][6])
digits[r][c] = '_';
// In third row
r = 2;
if ((c % 4 == 0 && segments[digit][4]) ||
(c % 4 == 2 && segments[digit][2]))
digits[r][c] = '|';
else if (c % 4 == 1 && segments[digit][3])
digits[r][c] = '_';
}
}
void print_digits_array(void) {
int r, c;
for (r = 0; r < 3; r++) {
for (c = 0; c < MAX_DIGITS * 4; c++)
putchar(digits[r][c]);
putchar('\n');
}
}