Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Duvida com trabalho utilizando FILA


Renegadobr

Pergunta

' Olá pessoal do "scriptbrasil", estou tendo um problema com um trabalho que preciso entregar urgentemente, escrevi o codigo abaixo mas estou com algumas duvidas sobre duas falhas que estão me incomodando e ainda não consegui achar um modo de corrigir...

' Ao compilar o codigo ele gera automaticamente um codigo para os campos requisitados (placa e nome) tipo abaixo:

Posição na Fila : 1 (gera automatico)

N° Placa Veiculo : WED5594

Nome Motorista : Fulano

- agora começa o problema, não consegui limitar a quantidade de digitos com um mensagem de notificação acaso alguém queira realmente bagunçar colocando varios digitos um valor qualquer q fuja do padrão de uma placa veicular, qd isso acontece ele simplesmente da erro critico acima de varios digitos, para exibir a quantidade de 7 digitos é simples, mas eu queria q ele desse alguma notificação do tipo "numera da placa invalido" ou algo assim....

' No meio das insersões não posso adicionar espaço entre os caracteres, ex:

Placa: WED 5594

ou

Motorista: Fulano Silva

- quando é colocado algum espaço entre os caracteres ele separa-os para os campos seguintes, como se a primeira palavra fosse salvar em um campo e a palavra separada pelo espaço para o campo posterior...

..... já cozinhei a cabeça e não consegui melhorar isso.

' Estou pedindo a ajuda de vocês para poder corrigir essas falhas, o codigo esta abaixo e desde já agradeço por qualquer ajuda.

__________________________________________________________________

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

struct fila{
         int Posicao;
         char Placa [8];
         char Motorista[20];
         struct fila* prox;
};
typedef fila Fila;

int main(){

      Fila *f;
      int op, posicao;
      char placa[8];
      char motorista[20];

      Fila* inicializa (void);
      
      void libera (Fila *a);
      
      Fila* insere_ultimo(Fila *a);
      
      void imprime (Fila *l);
      
      int vazia (Fila *a);
      
      Fila* retira_primeiro (Fila *a);
      
      Fila* altera_fila (Fila *a);

      posicao=1;

      f = inicializa(); 

      do{
       system("CLS");
       system("title Sistema - Organizador de Fila");
       system("color 0e");
       printf("\n ======= MENU GERAL ======");
       printf("\n|   Organizador de Fila   |");
       printf("\n =========================");
       printf("\n|  1 Incluir Motorista(s)  |");
       printf("\n|  2 Exibir Motorista(s)   |");
       printf("\n|  3 Retirar Motorista(s) |");
       printf("\n|  4 SAIR                  |");
       printf("\n =========================");
       printf("\n\nEscolha a opcao desejada: ");
       scanf("%d",&op);

       switch (op){
         case 1:
                printf("\nPosicao: %d\n", posicao);
                f=insere_ultimo(f);
                posicao++;                
                break;
         case 2:
                imprime(f);                
                posicao--;
                break;
         case 3:
                f=retira_primeiro(f);
                break;               
         case 4:
             printf("\nDeseja realmente sair ( 4-Sim , 1-não ) ? ");
             scanf("%d",&op);
             break;
         default:
             printf("Opcao Invalida! \n");
             system("pause>nul");
             break;
       }
      }while (op!=4);      
   libera(f);   
   return 0;
}

Fila* inicializa (void){  
  return NULL;
}

Fila* insere_ultimo (Fila* a){
   Fila* p = a; 
   Fila *novo = (Fila*) malloc(sizeof(Fila));  
   char placa [8];
   char motorista [20];
  printf("Informe o Numero da Placa: ");
  scanf("%s",&placa);
  printf("Informe o Nome do Motorista: ");
  scanf("%s",&motorista);

  strcpy(novo->Placa,placa);
  strcpy(novo->Motorista,motorista);
  novo->prox=NULL;
  if (a==NULL){
    a=novo;
  }
  else{  
   while (p->prox!=NULL){
     p=p->prox;
   }  
   p->prox = novo;
  } 
  system("pause>nul");
  return a;
}

void imprime (Fila* a){
 Fila* p = a; 
 int s=1;
 if (p!=NULL){
  while (p!=NULL){
    printf("\nPosicao %d: \n", s);
    printf("Placa = %s \n",p->Placa);
    printf("Motorista = %s\n", p->Motorista);
    s++;
    p = p->prox;
  };
 }
 else{
   printf("\nFila Vazia! \n");
 }
 system("pause>nul");
}

Fila* retira_primeiro (Fila* a) {
 Fila* p = a; 
 if (a != NULL){
   printf("\n Placa = %s ", p->Placa);
   printf("\n Motorista = %s ", p->Motorista);
   printf("\n < Retirado > \n");
   free(p);
   
   if (a->prox!=NULL){
     p = a->prox;                 
     printf("\n -Proximo Motorista: ");     
     printf("\n Placa = %s ", p->Placa);
     printf("\n Motorista = %s \n", p->Motorista);                      
   }
   else{
     printf("\nNao há mais motoristas cadastrados! \n");     
     system("pause>nul");
     return NULL;
   }  
 }
 else {
   printf("\n Fila Vazia! \n");
   system("pause>nul");
   return NULL;
 }
 system("pause>nul");
 return p;
}

void libera (Fila* a){
 Fila* p = a;
 Fila* t; 
 if (p!=NULL){
  t = p->prox;
  while (p != NULL) {
   t = p->prox;
   free(p); 
   p = t; 
  }
 }
}

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

E ae Renegado, beleza?

Cara você pode usar o code [][] para colocar o fonte ae... fica melhor de olhar.

Então lá vai alguns pontos:

//Após os scanf coloque o comando getchar... só 2 lugar do seu código
printf("\n\nEscolha a opcao desejada: ");
scanf("%d",&op);
getchar();


printf("\nDeseja realmente sair ( 4-Sim , 1-não ) ? ");
scanf("%d",&op);
getchar();
Agora na parte da leitura de cadeia de caracter não use o scanf, pode usar o gets mesmo. Você vai poder agora digitar com espaço no nome do motorista, por exemplo: João da Silva.
do
{
   printf("Informe o Numero da Placa: ");
   gets( placa );
  
   if( placa[7] != '' )
   {
      printf( "Placa informada errada, tente novamente (XXXNNNN) !\n" );
   }
}
while( placa[7] != '' );  // Essa verificação vai te ajudar para o camarada digitar somente 7 digitos. Se ele digitar algo maior ou menor que isso vai dar erro e vai manda-lo digitar novamente :)

printf("Informe o Nome do Motorista: ");
gets( motorista );

EDIT: Cara onde está escrito != ' ' dentro deste ' ' eu coloquei um 'barrazero' ... não sei porque está aparecendo vazio aí.

Acho que é isso. Testa aí e vê se ajudei.

Att,

WebPantoja

Editado por webpantoja
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...