Ir ao conteúdo
  • Cadastre-se
Fernando Reis_576852

Problemas com programa em c

Recommended Posts

Estou desenvolvendo um software, e queria ajuda. 

tipo assim eu queria que se num2==num1 execute linha 12, só que na próxima vez que repetisse caísse na linha 15 num1==num2

, pra variar a ordem e não cai o erro sempre no num2.

 

1 while(i<=10){
2 printf("%s digite seu n%cmero: ",nome1,163);
3 scanf("%d",&num1);
4 system("cls");
5 printf("%s digite seu n%cmero: ",nome2,163);
6 scanf("%d",&num2);
7 system("cls"); 
8 if(num1 > 20 || num2 > 20){
9 printf("Valor n%co aceito",198);
10 }
11 if(num2==num1){
12 printf("%s numero igual ao do numero1",nome2);
13 printf(" \n");
14 }else{
15 if(num1==num2)
16 printf("%s numero igual ao do numero 2",nome1);
17
18 }
19 i = ++i;
20 }

Compartilhar este post


Link para o post
Compartilhar em outros sites

As expressões "(num1 == num2)" e "(num2 == num1)" são iguais. Mesmo coisa dizer que (2 == 2), assumindo que num1 e num2 possuam valor 2.

Acredito que a melhor expressão pra demonstrar a igualdade, seria:

if (num1 == num2)    printf("N%cmero 1 [%d] e n%cmero 2 [%d] s%co iguais\n", 163, num1, 163, num2, 198);
  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia é que sejam iguais, mas uma executada de cada vez, por exemplo.

 

11 if(num2==num1){ //Uma hora executar essa linha

12 printf("%s numero igual ao do numero1",nome2);
13 printf(" \n");
14 }else{
15 if(num1==num2) // outra hora executar essa, variando cada vez que o laço repita. tentei goto mas deu loop.
16 printf("%s numero igual ao do numero 2",nome1);
17
18 }

Alguém, por favor me ajude .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o screen disse, a expressão a mesma. Se você quiser que ela faça coisas diferentes cada vez que for acessada, você precisa usar algum tipo de 'flag' ou modificador nela.

 

int x = 1;...if (num1 == num2) {     if (x = !x) printf("%s numero igual ao do numero1",nome2);     else printf("%s numero igual ao do numero 2",nome1);}

 

Só por curiosidade, por que você tá complicando de propósito um código simples assim?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

É uma coisa que to desenvolvendo e não pensei em outro caminho a não ser este .

Não quero que seja diferente só quero que

 

11 if(num2==num1){ //Quando executar pela primeira vez , executar essa linha. mas quando o laço repetir queria que essa linha não fosse executada e ao invés dela ser executada a linha 15 ser executada. Tipo como se ela não existisse pra passar direto pra linha 15.

12 printf("%s numero igual ao do numero1",nome2);
13 printf(" \n");
14 }else{
15 if(num1==num2) // outra hora executar essa, variando cada vez que o laço repita. tentei goto mas deu loop.
16 printf("%s numero igual ao do numero 2",nome1);
17
18 }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, se o motivo for apenas pra aprendizado, eu até entendo... e acho que usando uma flag como eu demonstrei já resolve. Mas tenha em mente que como programador é importante sempre pensar na experiência que o usuário vai ter com o seu programa... mostrar uma mensagem de erro diferente sempre que a mesma coisa acontece é uma falha de design de projeto, pois o usuário pode ficar perdido.

 

Desse modo você alterna entre as mensagens:

int x = 1;...if (num1 == num2) {     if (x = !x) printf("%s numero igual ao do numero1",nome2);     else printf("%s numero igual ao do numero 2",nome1);}

 

Desse modo você mostra a primeira mensagem apenas uma vez:

int x = 1;...if (num1 == num2) {     if (x) printf("%s numero igual ao do numero1",nome2);     else printf("%s numero igual ao do numero 2",nome1);     x = 0;}
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta, então me ajuda.

Eu queria desenvolver algo, vou tentar explicar de outra forma. Por exemplo o programa vai ter no máximo 5 pessoas, e o programa vai perguntar quantas pessoas vão participar 1 (Ele não aceita) 2,3,4 ou 5. Ai cada um pensa em um número, se forem 2 pessoas, por exemplo eu penso em um número você pensa em outro e vamos falando número até eu falar o seu  ou você falar o meu, só que eu queria que os números falados não pudessem mais ser usados. Entendeu ?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os números que já foram falados não valem mais pra todos os jogadores, ou apenas pra quem já falou ele?

 

Eu resolveria isso simplesmente criando uma lista dos números que já foram falados.

 

Por exemplo:

- Jogador 1 escolhe o seu número.

- Jogador 2 escolhe o seu número.

 

Lista de números falados vazia = { };

 

- Jogador 1 diz que o número do jogador 2 é X.

- Testa se X tá na lista de números falados.

- Se sim:

- - - "Número já dito. Escolha outro / passa a vez / etc"

- Se não:

- - - X é igual ao número do jogador 2?

- - - Se sim:

- - - - - - "Acertou. Fim do jogo"

- - - Se não:

- - - - - - Insere X na lista de números falados.

 

Lista de números falados = { X };

 

Daí repete a mesma coisa pro Jogador 2, depois volta pro 1, etc.

 

Essa lista pode ser implementada do jeito que você quiser. Desde uma lista encadeada até um array simples com um índice. Daí cria uma função pra fazer uma busca nessa lista, pra testar os números que forem ditos.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vale para todos os jogadores, eu tinha pensando nessa solução mas não tinha pensado na parte de números falados. Já tava pensando em como fazer mas não sabia, Você ajudou bastante. valeu, qualquer dúvida a mais posto aq .

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dont, agora fui testar sua explicação e não consegui passar pro código . Porque eu queria que fosse assim.

 

Jogador 1 escolhe numero tal "15" // Não consigo fazer a comparação

Jogador 2 escolhe numero tal "17"

numero do jogador 1 está na lista de números falados ? // Não consegui fazer isso

se sim, escolha outro número

se nao 

numero do jogador 1 é igual ao do jogador 2 // Mais uma vez não consegui fazer a comparação

se sim Acertou 

se nao 

Jogador ... Enfim poderia demonstrar o que falou em código ? Por favor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou mandar um exemplo:

#include <stdio.h>int checaListaDeNum(int *numeros, int tam, int num) {    int x;    for (x = 0; x < tam; x++)        if (numeros[x] == num) return 1;    return 0;}int main(){    int numero = 123;    int num1;    int numInvalidos[100];    int tamanhoVetor = 0;        int fim = 1;        while (tamanhoVetor < 100) {        scanf("%d", &num1); // pega o numero do jogador 1        if (checaListaDeNum(numInvalidos, tamanhoVetor, num1) == 1) {            // numero do jogador 1 já está na lista de numeros escolhidos            printf("Escolha outro numero, jogador1\n");        } else {            if (num1 == numero) {                printf("Acertou\n");                break; // sai do while            } else {                numInvalidos[tamanhoVetor++] = num1; // adiciona o numero na lista de números já falados e atualiza o tamanho do vetor                printf("Errou\n");            }        }    }    return 0;}

 

Pra fazer com dois ou mais jogadores, basta adicionar outras variáveis pra eles, e modificar o while.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

"só que eu queria que os números falados não pudessem mais ser usados"

Mesmo com um vetor que relembre-nos os números já declarados,

somente isso, não é possível de impedir que o declaremos novamente;

 

Visualize:

1* Jogador Diz: 21 [ enter ];

ERRO: Vetor < 21 não é o numero secreto;

1* Jogador Diz: 21 [ enter ]; << Oras!! Já havia digitado isso antes;

ERRO: Vetor <21> já existe;

 

Porém nada impediu 1* jogador de teclar; 21 e enter;

Acho que [enter] deve ser ignorado caso o numero já exista, pode

ficar ainda mais interessante porém mais complicado, ignorar o enter

e apagar o input já vai ficar legal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×