1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C Help Me Again

Discussão em 'Programação' iniciada por theking1200, 5 de Setembro de 2008. (Respostas: 6; Visualizações: 544)

  1. theking1200

    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: 5 de Setembro de 2008
  2. Baderous

    Baderous Banido

    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");
     
  3. theking1200

    theking1200 Banido

    Pois é o Damas bem falava no livro do buffer do Enter, o gajo é esperto lol
    Obrigado:002:
     
  4. Baderous

    Baderous Banido

    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.
     
  5. Ace-_Ventura

    Ace-_Ventura Power Member

    que inclusive não funciona no linux.
     
  6. theking1200

    theking1200 Banido

    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: 5 de Setembro de 2008
  7. Master_piece

    Master_piece Power Member

    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
     

Partilhar esta Página