Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jefers0n

[Resolvido] Problema na impressão de variável...

Recommended Posts

Boa tarde,

 

Estou com um probleminha, estou fazendo meu trabalho final da disciplina de Lab. de programação I (em C) e encontrei o seguinte problema, tenho que imprimi um vetor na tela de 15 posições, mas só 5 estarão com dados visíveis, as outras, para não imprimir lixo eu queria imprimir apenas um hífem '-', só que o tipo de dado do vetor é int, e a saída na tela esta sendo o numero 45 (que descobri que na tabela ASCII é o numero correspondente ao char '-' hífem) agora como eu faço para imprimí-lo corretamente???

Preciso que o tipo seja int, pois posteriormente a posição pode ser ocupada por numeros que serão calculados...

 

//quando faço isso:
int v[15], i;

	 for (i = 0;i < 15; i++) {
		  v[i] = '-';
	 }
//depois o vetor recebe em suas primeiras posições até a 5ª dados inteiros, mas o restante tem que ficar com o hífem, porém ao mandar imprimir a saída tá sendo o numero 45. e não o hífem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem que fazer essa verificação na hora de imprimir, se o array é de inteiros, NUNCA ficará o '-' (hífem) nele, mas sim o ASCII correspondente...

 

na hora de preencher, faça algo do tipo:

#define INVALID -1

int vet[15], i;

	 for (i=0; i<15; i++)
		 vet[i] = INVALID;

	 //preencha o array com os outros valores
	 for (i=0; i<15; i++)
	 {
		   if (vet[i] == INVALID)
				fputs(stdout, "-");
		   else
				fprintf(stdout, "%d", vet[i];
	 }

Detalhe: Note que a macro "INVALID" é só para facilitar a leitura e compreensão do código, mas pode-se trocar por -1 numa boa (mas perderá um pouco da legibilidade)

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem que fazer essa verificação na hora de imprimir, se o array é de inteiros, NUNCA ficará o '-' (hífem) nele, mas sim o ASCII correspondente...

 

na hora de preencher, faça algo do tipo:

#define INVALID -1

int vet[15], i;

	 for (i=0; i<15; i++)
		 vet[i] = INVALID;

	 //preencha o array com os outros valores
	 for (i=0; i<15; i++)
	 {
		   if (vet[i] == INVALID)
				fputs(stdout, "-");
		   else
				fprintf(stdout, "%d", vet[i];
	 }

Detalhe: Note que a macro "INVALID" é só para facilitar a leitura e compreensão do código, mas pode-se trocar por -1 numa boa (mas perderá um pouco da legibilidade)

Obrigado pela resposta, mas será que não teria uma forma mais fácil para fazer, pois é a primeira cadeira de C (cesinho puro, para compilar no linux(apresentação será em linux na aula)), e como nas aulas não chegamos a usar algo assim, não sei se seria legal usar, pois o codigo não pode ter comentário e serei questionado durante á apresentação sobre o código e o funcionamento do mesmo, e acho que não saberia explicar como funcionou a tua lógica (sou ainda um iniciante). :(

 

Pensei em outra coisa, posso mandar imprimir um espaço em branco assim:

for (i = 0;i < 15; i++) {
		  vet[i] = ' ';
	 }

Daí eu só mudaria nas outras funções que eu fiz antes de testar e não funcionou como eu queria, que se a posição estiver em branco posso colocar um número, senão passo pra próxima... Funcionaria ou o espaço em branco tb não vai escrever(poderia fazer o teste, mas ~to no trabalho agora e não tenho compilador aqui..., nem permissões para instalar um :( ).

 

[]'s

Jeferson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas, você não pode quardar um char num vetor de inteiros...

quer dizer, até pode, mas vai guardar o valor ASCII do char...

 

você vai ter que fazer essa validação na hora de imprimir o vetor.

A parte mais importante é:

if (vet[i] == -1)
				printf("-");
		   else
				printf("%d", vet[i]);

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se o dado visível for -1? Sem saber as restrições fica difícil.

na verdade são dois vetores(pois quando iniciei o trabalho ainda nem tinha visto structs), depois que foi ensinado struct a profª informou que poderia usar, mas como eu ja tava na metade deixei com vetor mesmo, o seguinte:

 

O trabalho é p/ implementar um jogo de carta(inventado pelos professores, o mesmo não existe), tenho que mostrar na tela as cartas de cada jogador, eu havia feito tubo certinho, criava o baralho, as 13 cartas de cada naipe, embaralhava, distribuia as 5 para cada jogador e imprimia as cinco na tela, um int para o numero da carta e um char para o naipe, mas daí a profª falou que o jogo deve permitir mais cartas na mão, pois segundo as regras, quando compra do baralho tem que largar uma carta(daí nunca iria usar mais que 5 posições do vetor), mas quando compra da mesa, pode ficar com a carta sem obrigatoriamente largar uma....daí me perdi.:(

 

Dai tenho que ter mais posições além das 5 que tinha projetado inicialmente, eu queria deixar as cartas aparecendo e as posições sem cartas com dois hífens, um da carta e outro do naipe, daí quando comprasse eu ia verificando a primeira posição que tivesse dois hifens e inseria ali a carta comprada...

 

Alguma outra idéia??? Eu poderia declarar o naipe como outro tipo??? ja que com o naipe não farei cálculo algum ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se o dado visível for -1? Sem saber as restrições fica difícil.

na verdade são dois vetores(pois quando iniciei o trabalho ainda nem tinha visto structs), depois que foi ensinado struct a profª informou que poderia usar, mas como eu ja tava na metade deixei com vetor mesmo, o seguinte:

 

O trabalho é p/ implementar um jogo de carta(inventado pelos professores, o mesmo não existe), tenho que mostrar na tela as cartas de cada jogador, eu havia feito tubo certinho, criava o baralho, as 13 cartas de cada naipe, embaralhava, distribuia as 5 para cada jogador e imprimia as cinco na tela, um int para o numero da carta e um char para o naipe, mas daí a profª falou que o jogo deve permitir mais cartas na mão, pois segundo as regras, quando compra do baralho tem que largar uma carta(daí nunca iria usar mais que 5 posições do vetor), mas quando compra da mesa, pode ficar com a carta sem obrigatoriamente largar uma....daí me perdi.:(

 

Dai tenho que ter mais posições além das 5 que tinha projetado inicialmente, eu queria deixar as cartas aparecendo e as posições sem cartas com dois hífens, um da carta e outro do naipe, daí quando comprasse eu ia verificando a primeira posição que tivesse dois hifens e inseria ali a carta comprada...

 

Alguma outra idéia??? Eu poderia declarar o naipe como outro tipo??? ja que com o naipe não farei cálculo algum ....

 

Resolvido, as posições sem cartas, em vez de dois hífens coloquei só um (do naipe da carta que é char...) escrevo a carta e naipe só quando for colocar uma carta nas posições...Funcionou.

Obrigado a todos pelo auxilio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.