我需要帮助是该脚本转换art 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);
}
我需要帮助是该脚本转换art ascii
如果我分别键入每个字母,那么一切都很好,它们会按原样出现但是,如果我尝试键入一个短语或多个字母,那么这是完全错误的gostaria de ajuda para tentar arrumar este erro que esta acontecendo
您有两种对齐方式问题:
例如,字母“ A”分别为3条扫描线分别打印4、5和6个字符。这将导致下一个字符出现乱码:
/\ __
/~~\ |__)
|__)
要解决此问题,请根据需要在每个printf
的末尾添加空格,为每个字母打印完全相同的字符。
例如对于字母“ A”,每个打印6个字符:
case 'A':
switch(ind) {
case 0:
printf(" /\\ "); /* <--- added 2 spaces */
break;
case 1:
printf("/~~\\ "); /* <--- added 1 space */
break;
case 2:
printf(" ");
break;
default:
break;
}
break;
对所有字符执行相同操作。
例如,'A'后跟'B'看起来很奇怪,因为对于前者,只使用了顶部的2条扫描线,而对于后者,只使用了底部的2条扫描线:
/\ __
/~~\ |__)
|__)
要解决此问题,请选择垂直对齐基准(例如,底部扫描线),然后在此处开始所有字母。
例如对于字母“ A”,请使用底部的2条扫描线,而不是顶部的2条:
case 'A':
switch(ind) {
case 0:
printf(" "); /* <--- moved from case 2 */
break;
case 1:
printf(" /\\ "); /* <--- moved from case 0 */
break;
case 2:
printf("/~~\\ "); /* <--- moved from case 1 */
break;
default:
break;
}
break;
结果:
__
/\ |__)
/~~\ |__)
对所有字符执行相同操作。