Ir para conteúdo

Arquivado

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

jorgeamiguel

[Resolvido] getchar() não funciona

Recommended Posts

RESOLVIDO (Solução no final)

 

Bem, estou tentando fazer um jogo da velha...

 

Durante o processo de criação eu me deparei com um obstáculo... no caso, seria o getchar(); que nãoe stá funcionando... quando chega nele o programa simplesmente fecha sendo que antes funcionava...

 

Queria entender porque...

 

Poderiam me ajudar?

 

#include <stdio.h>
#include <windows.h>


char tabuleiro [3][3] = {{' ',' ',' '},{' ',' ',' '},{' ',' ',' '}},n='X';
void imprimir(), colocar();
int jog = 1,lin,col;

main()
{
      imprimir();
      colocar();
      system("cls");
      getchar();
      }
      
      
void imprimir()
{
     int i,j;
     for (i=0;i<3;i++)
     {
         for (j=0;j<3;j++)
             printf ("%c",tabuleiro[i][j]);
         putchar('\n');
         }
     }

void colocar()
{
     printf ("Jogador %d: Em qual linha esta o alvo?",jog);
     scanf ("%d",&lin);
     printf ("Jogador %d: Em qual coluna esta o alvo?",jog);
     scanf ("%d",&col);
     tabuleiro[lin][col]= n;
     if (n == 'X') 
          n = 'O';
     else
         n = 'X';
     }

 

 

 

 

 

 

 

EDIT

 

Resolvi o problema... era apenas sujeira de buffer... então inseri %*c nos scanf para jogar o lixo do buffer fora...

 

=D

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom pela 9123912E+, main é do tipo int e deve retornar um inteiro..

ql compilador está usando.. tente assim:

scanf("%*c");

e isso aki funfa msm: kkkk

void imprimir(), colocar();

dessa eu n sabia msm.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

@quitZAUMMM

 

Como pode ver pelo edit que eu já tinha dado, eu resolvi com o %*c para jogar o lixo de buffer fora...

 

Em relação a void imprimir(), colocar(); o programa lê de cima par abaixo, logo eu teria que declarar estas funções ali em cima como eu fiz ou então colocar as funções em cima do main para não dar erro... como as duas são void coloquei assim(como as var) e não deu erro...

 

PS:.. uso Dev-C++

 

 

=========

 

NOVA DÚVIDA:

 

Olha que estranho que aparece logo no início do meu programa, quando era pra imprimir o tabuleiro sem nada:

 

Imagem Postada

 

PS:.. tentei usar o fflush(stdout); achando que tinha sujeira na saída dos dados, mas não adiantou...

 

Novo código:

 

#include <stdio.h>
#include <windows.h>


char tabuleiro [3][3] = {{' ',' ',' '},{' ',' ',' '},{' ',' ',' '}},n='X';
void imprimir(),colocar();
int jog = 1,lin,col;

main()
{
      imprimir();
      colocar();
      system("cls");
      imprimir();
      colocar();
      system("cls");
      imprimir();
      colocar();
      system("cls");
      imprimir();
      colocar();
      getchar();
      return 1;
      }
      
      
void imprimir()
{
     int i,j;
     for (i=1;i<4;i++)
     {
         for (j=1;j<4;j++)
             printf ("%c",tabuleiro[i][j]);
         putchar('\n');
         }
     }

void colocar()
{
     printf ("Jogador %d: Em qual linha esta o alvo?",jog);
     scanf ("%d%*c",&lin);
     printf ("Jogador %d: Em qual coluna esta o alvo?",jog);
     scanf ("%d%*c",&col);
     tabuleiro[lin][col]= n;
     if (n == 'X') 
          n = 'O';
     else
         n = 'X';
     if (jog == 1)
        jog = 2;
     else
         jog = 1;
     }

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente assim:

char tabuleiro [3][3] = {{'\0','\0','\0'},{'\0','\0','\0'},{'\0','\0','\0'}},n='X';

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preste atenção no que você está escrevendo porque índices começam do zero em C.

Se o array tem três elementos, o índice varia de 0 até 2 e não de 1 até 3.

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.