Jefers0n 0 Denunciar post Postado Junho 18, 2009 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
VictorCacciari 42 Denunciar post Postado Junho 18, 2009 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
Jefers0n 0 Denunciar post Postado Junho 18, 2009 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
VictorCacciari 42 Denunciar post Postado Junho 18, 2009 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
_Isis_ 202 Denunciar post Postado Junho 19, 2009 E se o dado visível for -1? Sem saber as restrições fica difícil. Compartilhar este post Link para o post Compartilhar em outros sites
Jefers0n 0 Denunciar post Postado Junho 19, 2009 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
Jefers0n 0 Denunciar post Postado Junho 20, 2009 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