【发布时间】:2020-02-03 07:20:23
【问题描述】:
我需要帮助是这个脚本来转换艺术 ascii
如果我分别输入每个字母,一切都很好,它们会按应有的方式出现 但是,如果我尝试输入一个短语或多个字母,那么艺术就全错了
#define BUFF_SIZE 256
#include <stdio.h>
#include <string.h>
void print(char* string) {
int len = strlen(string);
int ind, ctr;
char ptr;
for(ind = 0; ind < 3; ++ind) {
for(ctr = 0; ctr < len; ++ctr) {
ptr = string[ctr];
switch(ptr) {
case 'A':
switch(ind) {
case 0:
printf(" /\\ ");
break;
case 1:
printf("/~~\\ ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'B':
switch(ind) {
case 0:
printf(" __ ");
break;
case 1:
printf("|__)");
break;
case 2:
printf("|__)");
break;
default:
break;
}
break;
case 'C':
switch(ind) {
case 0:
printf(" __ ");
break;
case 1:
printf("/ ` ");
break;
case 2:
printf("\\__, ");
break;
default:
break;
}
break;
case 'D':
switch(ind) {
case 0:
printf(" __ ");
break;
case 1:
printf("| \\ ");
break;
case 2:
printf("|__/ ");
break;
default:
break;
}
break;
case 'E':
switch(ind) {
case 0:
printf(" ___ ");
break;
case 1:
printf("|__ ");
break;
case 2:
printf("|___ ");
break;
default:
break;
}
break;
case 'F':
switch(ind) {
case 0:
printf(" ___ ");
break;
case 1:
printf("|__ ");
break;
case 2:
printf("| ");
break;
default:
break;
}
break;
case 'G':
switch(ind) {
case 0:
printf(" __ ");
break;
case 1:
printf("/ _` ");
break;
case 2:
printf("\\__> ");
break;
default:
break;
}
break;
case 'H':
switch(ind) {
case 0:
printf("|__| ");
break;
case 1:
printf("| | ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'I':
switch(ind) {
case 0:
printf(" | ");
break;
case 1:
printf(" | ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'J':
switch(ind) {
case 0:
printf(" | ");
break;
case 1:
printf("\\__/ ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'K':
switch(ind) {
case 0:
printf("|__/ ");
break;
case 1:
printf("| \\ ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'L':
switch(ind) {
case 0:
printf("| ");
break;
case 1:
printf("|___ ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'M':
switch(ind) {
case 0:
printf("|\\/|");
break;
case 1:
printf("| | ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'N':
switch(ind) {
case 0:
printf("|\\ | ");
break;
case 1:
printf("| \\| ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'O':
switch(ind) {
case 0:
printf(" __ ");
break;
case 1:
printf("/ \\ ");
break;
case 2:
printf("\\__/ ");
break;
default:
break;
}
break;
case 'P':
switch(ind) {
case 0:
printf(" __ ");
break;
case 1:
printf("|__) ");
break;
case 2:
printf("| ");
break;
default:
break;
}
break;
case 'Q':
switch(ind) {
case 0:
printf(" __ ");
break;
case 1:
printf("/ \\ ");
break;
case 2:
printf("\\__X ");
break;
default:
break;
}
break;
case 'R':
switch(ind) {
case 0:
printf(" __ ");
break;
case 1:
printf("|__) ");
break;
case 2:
printf("| \\ ");
break;
default:
break;
}
break;
case 'S':
switch(ind) {
case 0:
printf(" __ ");
break;
case 1:
printf("/__` ");
break;
case 2:
printf(".__/ ");
break;
default:
break;
}
break;
case 'T':
switch(ind) {
case 0:
printf(" ___ ");
break;
case 1:
printf(" | ");
break;
case 2:
printf(" | ");
break;
default:
break;
}
break;
case 'U':
switch(ind) {
case 0:
printf("| | ");
break;
case 1:
printf("\\__/ ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'V':
switch(ind) {
case 0:
printf("\\ / ");
break;
case 1:
printf(" \\/ ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'W':
switch(ind) {
case 0:
printf(" | | ");
break;
case 1:
printf(" |/\\| ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'X':
switch(ind) {
case 0:
printf(" \\_/ ");
break;
case 1:
printf(" / \\ ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'Y':
switch(ind) {
case 0:
printf(" \\ / ");
break;
case 1:
printf(" | ");
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
case 'Z':
switch(ind) {
case 0:
printf(" __ ");
break;
case 1:
printf(" / ");
break;
case 2:
printf(" /_ ");
break;
default:
break;
}
break;
default:
break;
}
}
printf("\n");
}
printf("\n");
}
void print(char* string);
int main(int argc, char *argv[]) {
if (argc > 1) {
char text[BUFF_SIZE] = {0};
int n = 1;
while (n < argc) {
strcat(text, argv[n]);
strcat(text, " ");
n++;
}
n = 0;
char ptr;
while(text[n]) {
ptr = text[n];
text[n] = (toupper(ptr));
n++;
}
print(text);
} else {
printf("\n Digite o texto a ser convertido \n");
char text[BUFF_SIZE];
fgets(text, sizeof(text), stdin);
int i = 0;
char ptr;
while(text[i]) {
ptr = text[i];
text[i] = (toupper(ptr));
++i;
}
print(text);
}
return(0);
}
我需要帮助是这个脚本来转换艺术 ascii
如果我分别输入每个字母,一切都很好,它们会按应有的方式出现 但是,如果我尝试输入一个短语或多个字母,那么艺术就全错了 gostaria de ajuda paratentar arrumar este erro que esta acontecendo
【问题讨论】:
-
假设 ASCII 编码,如果您将所有 *"ASCII art" 片段放在一个数组中,您的代码可能会小很多,例如
const char *art[26][3] = { { /* art for A */ }, { /* art for B */ }, ... };那么你可以简单地使用printf(arg[ptr - 'A'][ind]); -
尝试让您的所有
printf打印每个字母完全相同数量的字符! (即根据需要在末尾附加空格)。现在,例如,字母“A”分别为每条扫描线打印 4、5 和 6。这会导致对齐问题。 -
同样,您必须修复不同字母之间的垂直对齐。现在,例如,“A”后跟“B”会看起来很奇怪(因为前者只使用顶部 2 条扫描线,而后者只使用底部 2 条)。
标签: c++ c compiler-errors ascii