Ir para conteúdo

POWERED BY:

Arquivado

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

baxinha_RS

Variável auxiliar

Recommended Posts

Preciso fazer um algoritimo que recebe o numero de um crachá, porém este nunca pode se repetir.

 

Estou usando um vetor para guardar os numeros digitados, fiz um teste percorrendo todo o vetor e verificando se o valor em uma determina posição é igual ao numero digitado, porém não está funcionando.

Pensei em usar uma variável auxiliar mas não sei como fazer.

 

Tenho uma prova amanhã e preciso da solução deste problema para passar.

ALguém ajuda??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor, não briga comigo, sou obrigada a usar "gotoxy", o professor loco exige....

#include<stdio.h>
#include <conio.h>   // getch()

#include <stdio.h>
#include <stdlib.h>
#include <windows.h> // COORD

void gotoxy( int x, int y )
  {
  COORD coord;
  coord.X = (short)x;
  coord.Y = (short)y;
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
  }

int main()
 {
 int você[15], VSALA[15],op, i, j, saida, cont=0, VHE[15], VHS[15], cracha;
 char VNOME[15];
 
do
     {
     gotoxy(1,5);printf("\n1- Entrada:");
     gotoxy(1,6);printf("\n2- Saida");
     gotoxy(1,7);printf("\n3- Lista");
     gotoxy(1,8);printf("\n4- Fim");
     gotoxy(1,9);printf("\nOpcao:");     
     gotoxy(6,10);scanf("%d",&op);
 
  cracha=0;
  você[0]=0;
  
  if(op == 1) 
    {
    for(i=cont;i<15;i++)
     {
     gotoxy(20,8);printf("Numero do cracha:");
                  scanf("%d",&cracha);  
     //fflush(stdin);//limpa tudo que foi digitado no teclado.
     for(j=0;j<15;j++)
       {
       if(cracha == você[j])
        {
        printf("Erro!");
        }
        else
         {
        você[i]=cracha;                
       gotoxy(20,9);printf("Nome:");
                    scanf("%s",&VNOME[i]);
       gotoxy(20,10);printf("Numero da sala:");
                     scanf("%d",&VSALA[i]);
       gotoxy(20,11);printf("Horario de entrada:");
                     scanf("%d",&VHE[i]); 
      
      i=30;
      j=30;
      cont++;
      }
      }  
      system("cls");        
     } 
    } 
   
            
  if(op == 2)
    {
    saida=0;
    printf("Numero do cracha: ");
      scanf("%d",&saida); 
            
    for(i=0;i<15;i++)
      {
      if(saida == você[i])
        {
        printf("Numero do cracha: %d",você[i]);
        printf("Nome: %c",VNOME[i]);
        printf("\n1Numero da sala: %d",VSALA[i]);
        printf("\nHorario de entrada: %d",VHE[i]);
        printf("\nHorario de saida: ");
         scanf("%d",&VHS);
         system("cls");
        }        
      }                  
    }    
    if(op == 3)
     {
     for(i=0;i<cont;i++)
       {
       printf("\nNumero do cracha: %d",você[i]);
       printf("\nNome: %c",VNOME[i]);
       printf("\nNumero da sala: %d\n",VSALA[i]);
       printf("\nHorario de entrada: %d",VHE[i]);
       printf("\nHorario de saida: %d",VHS[i]);
       
       }            
     }   
         
  }while(op!=4);
}
 getch();

Compartilhar este post


Link para o post
Compartilhar em outros sites

se eu entendi seu problema, ele parece estar nesse trecho de código.

 

supondo que a primeira posição de "você[]" seja o crachá digitado.

 

for(j=0;j<15;j++) {
  if(cracha == você[j]) { //primeira iteração cai aki
    printf("Erro!");
  } else {                //todas as outra cairão aki.
    você[i]=cracha; 
    gotoxy(20,9);printf("Nome:");
    scanf("%s",&VNOME[i]);
    gotoxy(20,10);printf("Numero da sala:");
    scanf("%d",&VSALA[i]);
    gotoxy(20,11);printf("Horario de entrada:");
    scanf("%d",&VHE[i]); 

    i=30;
    j=30;
    cont++;
  }
} 

variáveis não podem ter acento, ou se podem, é melhor deixar sem por garantia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, mesmo assim acredito que entendi a história.

 

minhaBoolean = false;
for(j=0;j<15;j++) {
  if(cracha == você[j]) {
    minhaBoolean = true;
  }
}
if(minhaBoolean == true) {
  printf("Erro. Crachá já digitado.");
} else {
    você[i]=cracha; 
    gotoxy(20,9);printf("Nome:");
    scanf("%s",&VNOME[i]);
    gotoxy(20,10);printf("Numero da sala:");
    scanf("%d",&VSALA[i]);
    gotoxy(20,11);printf("Horario de entrada:");
    scanf("%d",&VHE[i]); 

    i=30;
    j=30;
    cont++;
}

acredito que assim vai. só não esquece de declarar a variavel que em c acho que é bool, sei lah. isso é o de menos, pode ser um char S ou N int 0 1....

 

se tu achar que estou longe da solução detalha mais teu problema pra mais alguem tentar ajudar tb.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz algumas observações que vi de relance, não posso compilar este código. Meus comentários estão entre /* */ !

 

#include <conio.h> // getch()

/* Não precisa disto, utilize getchar() */

 

você[0]=0;

/* Está inicializando a primeira posição do vetor, com o inteiro 0. */

 

if(cracha == você[j])

/* Como o vetor, só tem uma posição preenchida e lixo no resto. Está comparação só vai ser verdadeira, quando 'cracha' for 0. */

 

printf("Erro!");

/* Se 'cracha', diferente de zero, sempre vai dar erro. */

 

i=30;

/* Matou teu primeiro looping. */

 

j=30;

/* Matou teu segundo lopping. */

 

system("cls");

/* Afff.. =/ */

 

saida=0;

/* Para que inicializar a variável aqui ? */

 

 

/* Se quiser fazer um 'MENU', utilize SWITCH... =) */

 

Até mais !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tenho mais duas sugestões. Nem li as de cima, então se repetir alguma me desculpe.

 

1. Não use scanf(). Quando puder evitar, evite. Quando (e se) você programar com necessidade de tratamento de erros (qualquer sistema sério precisa disso), vai perceber que essa função simplesmente te deixa ver que houve um erro, mas é quase sempre impossível dizer onde o erro ocorreu, então o máximo que você vai conseguir fazer é dizer "puts, deu pau aqui. Fechando o programa." :|

 

Sempre que possível, implemente uma função pra ler um valor de determinado tipo. No caso de arrays de caracteres terminados em 0 ("strings" fora do contexto de C), já existe a função fgets(). Se complicar, pra ler os números use scanf() por enquanto, mas tenha sempre o que eu te disse em mente.

 

 

 

2. NUNCA use fflush() pra limpar um buffer de entrada (exemplo: stdin). O comportamento da função neste caso é "indefinido". O que significa que ela pode funcionar agora, quebrar daqui a 5 minutos e causar fissão nuclear daqui a 15. Há mais ou menos um ano eu implementei uma função que faz o que você quer:

 

void clearib()
{
    char c;
    for(c = getc(stdin); c != '\n'; c = getc(stdin));
}

De qualquer forma, como você precisa trabalhar bastante com input da stdin quando está começando a programar, eu recomendo ler este post do meu blog (inclusive foi ali onde eu postei a função acima):

 

http://codeaddicts.wordpress.com/2009/11/08/clearing-the-input-buffer-in-c/ (tem essa função e uma explicação do que acontece com o buffer quando lemos dados).

 

Qualquer dúvida tamos aí.

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.