ron_lima
(usa Slackware)
Enviado em 09/03/2009 - 08:45h
Seguem as respostas:
1- Se você declara str como um vetor de caracteres, o modo correto de escrever seu scanf seria:
char str [3];
scanf ("%2s", str);
Basta lembrar que o identificador de um vetor em C é um apontador para o início do vetor. Portanto, não é necessário extrair o apontador para str através do operador &, o que causará um erro em tempo de execução.
A máscara "%2s" garante que somente 2 caracteres serão lidos na sua string. É importante declarar o seu vetor para suportar 3 caracteres para que se possa suportar o terminador de string. Caso contrário, haverá um pequeno buffer overrun na sua aplicação.
2. cls é um comando puramente DOS. Para limpar a tela do seu terminal linux, você pode fazer de duas formas: olhar o database de capacidades do seu terminal e verificar qual seqüência de escape limpa a sua tela (Esc[2J é a sequência de escape para o terminal VT100). Isso pode ser conseguido com a seguinte estrutura de código (o caractere de escape normalmente é o 0x1B:
printf ("\x1b[2J");
Outra forma é verificar alguma função na termios.h que faça o truque. Note que em ambientes linux/unix é necessário controlar o terminal para realizar esse tipo de coisa. Uma outra maneira é um truque sujo que era usado antes do aparecimento do database de capacidades dos terminais (termcap):
int i;
for (i=0; i<25; ++i) printf ("\n");
Essa forma não é recomendada, pois com o advento das interfaces gráficas os terminais podem ter mais do que somente 25 linhas. Em mil novecentos e antigamente esse era um método válido pois os terminais eram baseados em caractere e tinham apenas 24 linhas (no caso dos terminais com status bar ativada), ou 25 linhas no caso dos terminais VT100.