Ir ao conteúdo
  • Cadastre-se

C Jogo dois ou um linguagem C


Dudu Gomes

Posts recomendados

#include <stdio.h>
#include <stdlib.h> 

int main(int argc, char *argv[]) {

	int a;
	int b;
	int c;
	
	
		printf("jogador A faça sua jogada");
		scanf("%d",&a);
		printf("jogador B faça sua jogada");
		scanf("%d",&b);
		printf("jogagor C faça sua jogada");
		scanf("%d",&p);
	jogo=a,b,c;
	switch(jogo){
	    
	     case 1:
	     	if(a=!b,c){
	     	
			printf("A");
	     	break;
			 }
	     
	     	case 2:
	     		
	     		if(b=!a,c){
	     			
	     			printf("B");
	     			break;
	     			
				 }
	
	case 3:
		if(c!=a,b){
			
			printf("C");
			break;
		}
	
	
	}
		
		

	return 0;
	
}

Pessoal,estou começando em linguagem C e tentei desenvolver esse joguinho que não esta dando certo,gostaria da ajuda de vocês,quem poder me ajudar ficarei grato.

 

 

Link para o comentário
Compartilhar em outros sites

@Dudu Gomes Pois é... Ta bem errado seu programa.

Não entendi o que você quer.

Acho que você não entendeu como funcionam as atribuições, o switch case, o if else, etc.

Eu posso apontar alguns erros, daí você já aproveita quando for mandar o enunciado, já manda o código corrigido também.

Erros:

Não declarou a variável jogo.

Tentou atribuir as variáveis a, c e p à variável jogo. Se quiser atribuir, atribua apenas uma delas.

Usou switch/case erroneamente, esqueceu do default e colocou a instrução break dentro do if(). Deveria ser algo como:

/* Exemplo */
switch (variável)
{
   case constante1:
     Instruções;
   break;

   case constante2:
     Instruções;
   break;

   default
     Instruções;
}

Fez a comparação dentro do if() erroneamente também, estava tentando comparar 2 variáveis de uma vez:

/* Exemplo */
// Incorreto
if(a=!c,p){
 
printf("A");
break;
}
// Correto
if(a=!c && a=!p){
    //&& é o E lógico
    printf("A");
}
break;

Não sei se sua intenção era fazer algo como: 3 pessoas escolhem entre 2 números, e quem escolher um número diferente dentre os demais, o mesmo é impresso na tela. Seria algo do tipo?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 

@Dudu Gomes

Você não precisa do switch/case para isso, faça tudo usando a estrutura condicional if/else:

Se a!=b && b==c, então a é diferente;

Se b!=a && a==c, então b é diferente;

Se c!=a && a==b, então c é diferente.

Caso contrário, são todos números diferentes ou iguais.

E também, deixe bem claro o que o usuário deverá fazer, que no caso é escolher entre 2 números.

 

Uma dica:

Perceba que quando é digitado um número, o mesmo é impresso na tela:

image.png.5c2335b75001c239ce4b6a8f2e035357.png

Como os outros jogadores não deverão ver qual número é digitado, você poderia pensar em: ao digitar o número, algum caractere como * poderia ser impresso no lugar do número para que os demais jogadores não o visualizassem.

Mas, primeiramente, faça o principal, depois pense em possíveis aprimoramentos...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(int argc, char *argv[]) {

    int a;
    int b;
    int c;
        
        setlocale(LC_ALL,"Portuguese");
        printf("|===DOIS OU UM===|\n\n");
    
        printf("\n\njogador Alex faça sua jogada:");
        scanf("%d",&a);
        printf("\n\njogador Beto faça sua jogada:");
        scanf("%d",&b);
        printf("\n\njogador Clóvis faça sua jogada:");
        scanf("%d",&c);
        
    
    if(a!=b && b==c){
    printf("\nAlex parabéns\n");
    
    }
    
    else if(b!=a && a==c){
    printf("\nBeto parabéns\n");
    }
    
    else if(c!=a && a==b){
        
        printf("\nClóvis parabéns\n");
    }
    
    else if(a==c && c==b){
        printf("|===DISPUTA EMPATADA===|\n\n");
        
        
        
    }
    
    
    

                
     return 0;
    
    }
        
        

    

 

 

adicionado 3 minutos depois
agora, Dudu Gomes disse:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(int argc, char *argv[]) {

    int a;
    int b;
    int c;
        
        setlocale(LC_ALL,"Portuguese");
        printf("|===DOIS OU UM===|\n\n");
    
        printf("\n\njogador Alex faça sua jogada:");
        scanf("%d",&a);
        printf("\n\njogador Beto faça sua jogada:");
        scanf("%d",&b);
        printf("\n\njogador Clóvis faça sua jogada:");
        scanf("%d",&c);
        
    
    if(a!=b && b==c){
    printf("\nAlex parabéns\n");
    
    }
    
    else if(b!=a && a==c){
    printf("\nBeto parabéns\n");
    }
    
    else if(c!=a && a==b){
        
        printf("\nClóvis parabéns\n");
    }
    
    else if(a==c && c==b){
        printf("|===DISPUTA EMPATADA===|\n\n");
        
        
        
    }
    
    
    

                
     return 0;
    
    }
        
        

    


 

 

Depois das dicas ficou assim,agora está funcionando,falta algumas coisas,mas pra mim ja é um avanço,muito obrigado!!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

o palpite diferente dos outros é o o ganhador.

agora falta imprimir uma mensagem caso os jogadores digite um numero diferente de dois ou um, como por exemplo:numero inválido e também uma mensagem de empate

caso os tres números coincidam.

adicionado 7 minutos depois

a mensagem de empate eu fiz dessa forma que aí está

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Dudu Gomes

1 hora atrás, Dudu Gomes disse:

o palpite diferente dos outros é o o ganhador.

Entendi. No meu caso, eu aprendi que o perdedor de 2 ou 1 era quem apresentasse um número diferente dos demais, e assim formavam-se perdedores até que só sobrassem 2 pessoas, por fim elas disputavam par ou ímpar.

A forma que se joga varia de lugar para lugar. 😁

1 hora atrás, Dudu Gomes disse:

imprimir uma mensagem caso os jogadores digite um numero diferente de dois ou um

Não só imprima uma mensagem, mas também peça ao usuário para inserir o número novamente.

Pense comigo: enquanto a != 1 e a != 2, o usuário terá que inserir um novo número, sendo este 1 ou 2.

Por exemplo, 3 é diferente de 1 e de 2. Se o jogador digitar 3 várias vezes, enquanto o número digitado não for 1 ou 2, o mesmo deverá ser cobrado novamente.

Para cobrar o valor várias vezes até que o usuário insira um valor dentro do intervalo determinado, use um loop. Nesse caso, poderá ser uma estrutura de repetição while:

while(a != 1 && a != 2){ // Enquanto "a" for diferente de 1 ou 2
    printf("Valor inválido! Insira somente 1 ou 2: ");
    scanf("%*c%d", &a);
}

Isso terá que ser usado para os 3 casos a, b e c, e deverá entrar em ação logo depois de lido o número pela primeira vez, ou seja, logo abaixo da função scanf().

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h> 
#include <locale.h>
int main(int argc, char *argv[]) {

	int a;
	int b;
	int c;
	    
	    setlocale(LC_ALL,"Portuguese");
	    printf("|===DOIS OU UM===|\n\n");
	
		printf("\n\njogador Alex faça sua jogada:");
		scanf("%d",&a);
		
	while(a != 1 && a != 2){ 
	    	printf("\nCaro Jogador,esse valor é inválido!\nInsira somente 1 ou 2: ");
	    		
			scanf("%*c%d", &a);
	    
	}
		printf("\n\njogador Beto faça sua jogada:");
		scanf("%d",&b); 
		
	while 	(b != 1 && b != 2){
	
	    	printf("\nCaro Jogador,esse valor é inválido!\nInsira somente 1 ou 2:");
	   
	    	scanf("%*c%d", &b);
    	
	}
		
		printf("\n\njogador Clóvis faça sua jogada:");
		scanf("%d",&c);
	while 	(c!= 1 && c != 2){
	
	    	printf("\nCaro Jogador,esse valor é inválido!\nInsira somente 1 ou 2:");
	    	scanf("%*c%d", &c);
    		
	}	
		
		
		
	
		
	
	if(a!=b && b==c){
	printf("\nAlex parabéns\n");
	
	}
	
	else if(b!=a && a==c){
	printf("\nBeto parabéns\n");
	}
	
	else if(c!=a && a==b){
		
		printf("\nClóvis parabéns\n");
	}
	
	else if(a==c && c==b){
		printf("|===DISPUTA EMPATADA===|\n\n");
		
		
		
	}
	
	
	

				
     return 0;
	
	}
		
		

	

Boa tarde!

 

conforme o que entendi fiz assim,está rodando mais não sei essa seria a forma correta,analisa pra mim,e mais uma vez muito obrigado por toda ajuda.

adicionado 10 minutos depois

uma outra coisa não que não  compreendi foi essa expressão:   ("%*c%d", &a)

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Dudu Gomes Sim, você fez certo.

O que ocorre pode se resumir em:

scanf() lê o caractere inserido → (verificação) se for o número 1 ou o número  2, passa direto. Caso contrário, persiste no loop.

No loop:

(verificação) enquanto o número for diferente de 1 e de 2 → outro scanf() limpa o buffer e lê o caractere inserido → (verificação novamente) se for o número 1 ou o número 2, sai do loop. Caso contrário, o loop persiste.

 

38 minutos atrás, Dudu Gomes disse:

uma outra coisa não que não  compreendi foi essa expressão:   ("%*c%d", &a)

Bom, o %d é o identificador de variáveis do tipo int, e as variáveis a, b e c são do tipo int, por isso ele está aí.

Já o %*c é utilitário para caso o usuário insira algo que não é um número, como por exemplo, uma letra.

O que vai acontecer é que o scanf() vai ler o que no caso é o \n que é gerado ao se dar um ENTER, e descartá-lo. Em outras palavras, serve para limpar a sujeira do buffer.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...