Ir para o conteúdo
pedroluzio

Bug prog C

Mensagens Recomendadas

pedroluzio

Um colega meu pediu para lhe tentar resolver este problema, tem um bug associado á tecla 8 e 9

#include <stdio.h>
main()
{
int opx,a,b,c,d,e,f,g,h,i;
int op,jgx,jgo,ganha;


  printf("01|02|03\n");
  printf("04|05|06\n");
  printf("07|08|09\n\n");

  while (ganha!=1)
  {
  //printf("Quem joga primeiro?\n0--1\nX--2\n");	 
  //scanf("%d",op);
  printf("X Qual a sua jogada?",a,h);
  scanf("%opx",&opx);

  //Sistema de por coisa do X
  if(opx==1)
  a=1;
  if(opx==2)
  b=1;
  if(opx==3)
  c=1;												 
  if(opx==4)
  d=1;
  if(opx==5)
  e=1;
  if(opx==6)
  f=1;
  if(opx==7)
  g=1;
  if(opx==8)
  h=1;
  if(opx==9)
  i=1;

  //Sistema de por coisa da O
   if(opx==1)
  a=1;
  if(opx==2)
  b=1;
  if(opx==3)
  c=1;
  if(opx==4)
  d=1;
  if(opx==5)
  e=1;
  if(opx==6)
  f=1;
  if(opx==7)
  g=1;
  if(opx==8)
  h=1;
  if(opx==1)
  i=1;


//Verificação de quem ganha	
if (a==1&&b==1&&c==1||a==1&&d==1&&g==1||a==1&&e==1&&i==1||b==1&&e==1&&h==1||c==1&&f==1&&i==1||d==1&&e==1&&f==1||g==1&&h==1&&i==1||c==1&&e==1&&g==1)
{
   printf("O X ganha!");
   ganha=1;
   getch();
   exit(0);
}
if (a==2&&b==2&&c==2|a==2&&d==2&&g==2||a==2&&e==2&&i==2||b==2&&e==2&&h==2||c==2&&f==2&&i==2||d==2&&e==2&&f==2||g==2&&h==2&&i==2||c==2&&e==2&&g==2)
{
   printf("A O ganha!");
   getch();
   exit(0);
}



}	 

}	 



Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

haha ... desculpa .. mas tem uma certa piada

até aposto que nem consegues inserir mais do que uma jogada, se essa for válida ...

scanf("%opx",&opx);
//      A
//      |
//  que é isto ??

http://pubs.opengroup.org/onlinepubs/009695399/functions/scanf.html

The following conversion specifiers are valid:

...

o

Matches an optionally signed octal integer, whose format is the same as expected for the subject sequence of strtoul() with the value 8 for the base argument. In the absence of a size modifier, the application shall ensure that the corresponding argument is a pointer to unsigned.

...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Não sou tido nem achado :P não percebi nem uma parte do código, ele meteu um fflush não sei onde e conseguiu fazer o que queria

??? isso é português ???


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Resolveu só com um fflush? Uau :D

sim .. é um fflush mágico que lẽ números 8s e 9s quando se diz para ler números em base octal ...

-----------------------------

ps : diz ai ao teu colega para fazer assim :

#include <stdio.h>
#include <string.h>

#define CLEAR_INPUT while (getchar() != '\n') /* void */

#define RWIN(b, r, p) (b[r][0] + b[r][1] + b[r][2] == p * 3)
#define CWIN(b, c, p) (b[0][c] + b[1][c] + b[2][c] == p * 3)
#define D1WIN(b, p) (b[0][0] + b[1][1] + b[2][2] == p * 3)
#define D2WIN(b, p) (b[0][2] + b[1][1] + b[2][0] == p * 3)

#define WIN(b, p, r, c) (RWIN(b, r, p) || CWIN(b, c, p) || D1WIN(b, p) || D2WIN(b, p))

#define SPACE   32
#define PLAYER1 79
#define PLAYER2 88

void print_board(char board[3][3]) {
   printf("+----+----+----+\n"
          "|%c(1)|%c(2)|%c(3)|\n"
          "+----+----+----+\n"
          "|%c(4)|%c(5)|%c(6)|\n"
          "+----+----+----+\n"
          "|%c(7)|%c(8)|%c(9)|\n"
          "+----+----+----+\n\n",
          board[0][0],
          board[0][1],
          board[0][2],
          board[1][0],
          board[1][1],
          board[1][2],
          board[2][0],
          board[2][1],
          board[2][2]);
}

int main(void) {
   int op, win = 0, plays = 0;
   char board[3][3], player = PLAYER1;

   memset(board, SPACE, sizeof(board));
   print_board(board);
   do {
       printf("Qual a sua jogada? (Jogador %c): ", player);
       fflush(stdout);
       if (scanf("%d", &op) == 1) {
           op--;
           if (op >= 0 && op <= 8 && board[op / 3][op % 3] == SPACE) {
               board[op / 3][op % 3] = player;
               print_board(board);
               if (!(win = WIN(board, player, op / 3, op % 3)))
                   player = player == PLAYER1 ? PLAYER2 : PLAYER1;
               plays++;
           } else
               printf("Jogada inválida : %d\n", op + 1);
       } else
           printf("Erro de leitura do número\n");
       CLEAR_INPUT;
   } while (!win && plays < 9);

   if (win)
       printf("O jogador %c é vencedor\n\n", player);
   else
       printf("empate ... que seca ...\n\n");

   return 0;
}

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.