Jump to content
pedroluzio

Bug prog C

Recommended Posts

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);
}



}	 

}	 



Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
pedroluzio

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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;
}

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.