C Help Me Again

theking1200

Banido
Podiam dizer-me o que esta mal?
------------------------------------------------------------------------------------
Código:
#include <stdio.h>
main()
{
int i,j,n;
char ch;
 
printf("Introdusa um numero:_"); 
scanf("%d",&n);
 
printf("\nIntrodusa um Char:_");
scanf("%c",&ch);
 
for(i=1 ; i<=n ; i++)
{
for(j=1 ; j<=n ; j++)
putchar(ch);
putchar('\n'); 
}
getchar();
getchar();
 
}
--------------------------------------------------------------------------------------
O output esperado era o seguinte:

introdusa um n: 5
introdusa um char: *

*****
*****
*****
*****
*****
 
Última edição pelo moderador:
O problema é que, quando introduzes o inteiro, carregas em 2 teclas: o nº e ENTER. Assim, são colocados no buffer de entrada 2 valores e não 1. O 1º valor é associado à variável n e corresponde ao inteiro. O 2º é o ENTER, o qual fica armazenado no buffer. Assim, quando ele te pede para introduzir o caracter, como já tem 1 valor no buffer para utilizar (o tal valor do ENTER), ele vai consumir esse valor e associá-lo à variável ch. Como o caracter ch fica então com o valor do ENTER (que é o '\n'), o programa vai criar 5 linhas de '\n', logo não verás nada, nem será esse o teu objectivo. A solução passa por limpar o buffer de entrada antes de introduzires o caracter:

Código:
scanf("%*[^\n]"); scanf("%*c");
 
Sim, mas ele dá uma solução errada que consiste em fazer:

Código:
fflush(stdin);

Esta solução não está correcta pois o comportamento da função fflush não está definido para buffers de entrada (como o stdin). A solução que te dei é a mais correcta.
 
Sim, mas ele dá uma solução errada que consiste em fazer:

Código:
fflush(stdin);

Esta solução não está correcta pois o comportamento da função fflush não está definido para buffers de entrada (como o stdin). A solução que te dei é a mais correcta.
que inclusive não funciona no linux.
 
Ainda não cheguei a essa parte,(estou so no Final do Capitulo 4 Ciclos) mas tá errado ai ai Damas8|,
Ha e usei a que o damas diz aqui no Livro(ainda no capitulo 4) e é printf("\nIntrodusa um Char:_");
scanf(" %c",&ch); (com o espaço ) e dá mas obrigado e certamente que iria ter essa dificuldade mais para a frente
 
Última edição:
No livro diz pra deichares um espaço antes do "%c" de modo a que fique, scanf(" %c",&ch). Este espaço segundo o que está no livro faz com que o scanf ignore todos os new lines e mais algumas coisas.
Isto está explicado na mesma pagina do exercicio ou na pagina antes, e esa-lhe associado.
Eu tambem ando a estudar esse livro, mas já vou muito mais adiantado.

Cumps.
Master
 
Back
Topo