Jump to content

Recommended Posts

Posted (edited)

Alguém me pode dizer porque é que o código abaixo imprime coisas a mais?

Exemplo de input:

23 4 5 6

output:

VZYZTZTTZV

V

V

ZYSZYXXZYCOCYYZV

ZYSZKCZKSSZGZZJZQQSXXSZZZQXZZZZV

V

FGGGYGXGGKGXYSYW

W

S

#include <stdio.h>
#include <stdlib.h>
int main ()
{
int x[4096];
int i=0;
int len;
printf("Dá-me os números\n");
 while (scanf ("%d", &x[i]) != EOF)
len=sizeof(x)/sizeof(int);
	for (i=0; i<len; i++)
{
	if(x[i] == 26)
	printf ("A");
	else if(x[i] == 25)
	printf ("B");
	else if(x[i] == 24)
	printf ("C");
	else if(x[i] == 23)
	printf ("D");
	else if(x[i] == 22)
	printf ("E");
	else if(x[i] == 21)
	printf ("F");
	else if(x[i] == 20)
	printf ("G");
	else if(x[i] == 19)
	printf ("H");
	else if(x[i] == 18)
	printf ("I");
	else if(x[i] == 17)
	printf ("J");
	else if(x[i] == 16)
	printf ("K");
	else if(x[i] == 15)
	printf ("L");
	else if(x[i] == 14)
	printf ("M");
	else if(x[i] == 13)
	printf ("N");
	else if(x[i] == 12)
	printf ("O");
	else if(x[i] == 11)
	printf ("P");
	else if(x[i] == 10)
	printf ("Q");
	else if(x[i] == 9)
	printf ("R");
	else if(x[i] == 8)
	printf ("S");
	else if(x[i] == 7)
	printf ("T");
	else if(x[i] == 6)
	printf ("U");
	else if(x[i] == 5)
	printf ("V\n");
	else if(x[i] == 4)
	printf ("W\n");
	else if(x[i] == 3)
	printf ("X");
	else if(x[i] == 2)
	printf ("Y");
	else if(x[i] == 1)
	printf ("Z");
}
return 0;
}

P.S.: O 1º printf não funciona correctamente, a mensagem apresentada é "Dß-me os n.meros" como posso corigir isto?

EDIT1: o output parece ser o mesmo independentemente to input

Edited by pmg
LP adicionada ao GeSHi
Posted

Estás a usar a função scanf para preencher sempre o elemento 0 do array 'x'. A variável 'i' nunca muda. E falta um ';' no fim da linha senão vai executar a linha seguinte como parte de ciclo. Como não inicializas o resto do array o código tenta converter o que lá encontrar (lixo).

Deverias inicializar o array a zeros e parar o ciclo 'for' quando aparecer um valor 0 para converter, em vez da variável 'len'. Obviamente o último elemento do array nunca pode ser preenchido.

Quanto ao primeiro printf tens algum problema de configuração do sistema na parte da língua (página de caracteres errada ou mistura com Unicode).

Posted (edited)

Refiz o teu codigo:

#include <stdio.h>
#define MAX 3
int main(void)
{
int x[MAX], i=0, temp;
printf("Dame os numeros:\n");
for(; i < MAX;)
{
 scanf("%d", &temp);
 if(temp > 0 || temp < 27)
 {
  x[i] = temp;
  i++;
 }
 else
  printf("Valor invalido");
}
for(i=0; i < MAX; i++)
{
 if(x[i] == 26)
			printf ("A");
	else if(x[i] == 25)
			printf ("B");
	else if(x[i] == 24)
			printf ("C");
	else if(x[i] == 23)
			printf ("D");
 else if(x[i] == 22)
			printf ("E");
 else if(x[i] == 21)
			printf ("F");
 else if(x[i] == 20)
			printf ("G");
 else if(x[i] == 19)
			printf ("H");
 else if(x[i] == 18)
			printf ("I");
 else if(x[i] == 17)
			printf ("J");
 else if(x[i] == 16)
			printf ("K");
 else if(x[i] == 15)
			printf ("L");
 else if(x[i] == 14)
			printf ("M");
 else if(x[i] == 13)
			printf ("N");
 else if(x[i] == 12)
			printf ("O");
 else if(x[i] == 11)
			printf ("P");
 else if(x[i] == 10)
			printf ("Q");
 else if(x[i] == 9)
			printf ("R");
 else if(x[i] == 8)
			printf ("S");
 else if(x[i] == 7)
			printf ("T");
 else if(x[i] == 6)
			printf ("U");
 else if(x[i] == 5)
			printf ("V\n");
 else if(x[i] == 4)
			printf ("W\n");
 else if(x[i] == 3)
			printf ("X");
 else if(x[i] == 2)
			printf ("Y");
 else if(x[i] == 1)
			printf ("Z");
}
return 0;
}
Edited by n2wb1e

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.