Ir ao conteúdo
  • Cadastre-se

Erro em função


rasarib

Posts recomendados

bom estou com um problema , o programa esta rodando e tal , porém apresenta uns problemas como:

Quando voce entra na função reservar , ao reservar uma poltrona escreve poltrona invalida e dps que entra nas condiçoes .

Somente o reservar apresenta problemas...

Segue o Codigo:


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

#define A 0
#define B 1
#define C 2
#define D 3
#define E 4
#define F 5
#define TRUE 1
#define FALSE 0

struct passageiros {
char nome[30];
char cpf[15];
int fila ;
int coluna ;
};

// PROTOTIPOS DAS FUNCOES
void liberar() ;
void reservar() ;
void visualizar();
void mostrarPoltronas () ;
void salvar();
void carregar();
int fila( char fila ) ;
int reservarPoltronas ( char letra_fila , int coluna ) ;
void mostraFila( int coluna ) ;
int liberarPoltronas ( char letra_fila , int coluna);
void mostraFila( int coluna ) ;
int visualizarPoltronas ( char letra_fila , int coluna);


// VARIAVEIS GLOBAIS
int poltronas[6][23];
struct passageiros passageiro[6][23];


int main() {
int i,j,count;
int menu;
char opcao;
int executar_programa=TRUE;

carregar();

while ( executar_programa ) {

mostrarPoltronas();

printf(" CONSULTAR DISPONIBILIDADE DE VOO \n");
printf(" [R] RESERVAR \n");
printf(" [V] VISUALIZAR \n");
printf(" [L] LIBERAR POLTRONA \n");
printf(" [S] SAIR \n\n");
scanf("%c%*c",&opcao);

switch (opcao) {
case 'r': case 'R': // reserva
reservar();
break;
case 'v': case 'V': // visualizar
visualizar();
break;
case 'l': case 'L':
liberar();
break;
case 's': case 'S':
printf(" \nSaindo...\n\n ");
executar_programa = FALSE;
break;
default:
printf("\nOPCAO INVALIDA\n\n");
system("pause");
}
}


system ("pause");
return 0;
}

void visualizar(){
char letra_fila;
int coluna;
char nome[30];
char cpf[15];
int i ;
mostrarPoltronas();

// 2 - escolher poltrona e atualizar matriz

printf("Digite uma fila entre (A-F)e uma coluna entre (1-23): ");
scanf("%c %d%*c" ,&letra_fila,&coluna);


if ( poltronas[ fila(letra_fila) ][ coluna-1 ] == 0 ) {
printf("\n\n Poltrona nao esta reservada.\n\n ");
} else {
printf(" NOME: ");
printf(passageiro[ fila(letra_fila) ][ coluna-1 ].nome);
printf(" \n ");
printf(" CPF: ");
printf(passageiro[ fila(letra_fila) ][ coluna-1 ].cpf);
}



printf("\n");
system ("PAUSE");
}

void liberar () {
char letra_fila;
int coluna;
int poltrona_valida = 1 ;

while ( poltrona_valida ) {
mostrarPoltronas();

printf("Digite uma fila entre (A-F)e uma coluna entre (1-23): ");
scanf("%c %d%*c" ,&letra_fila,&coluna);

if ( coluna-1>22 )
{
printf("\n Coluna invalida!! \n");
system("pause");
return;
}

if (fila(letra_fila)>5 )
{
printf("\n Fila invalida!! \n");
system("pause");
return;
}
if ( poltronas[ fila(letra_fila) ][ coluna-1 ] == 0 ) {
puts("\n\n Poltrona nao esta reservada.\n\n ");
system("pause");
return;
} else {
poltrona_valida = liberarPoltronas( letra_fila , coluna-1 ) ;
}

}

// atualizar matriz
passageiro[ fila(letra_fila) ][ coluna-1 ].coluna = coluna-1;
passageiro[ fila(letra_fila) ][ coluna-1 ].fila = fila(letra_fila);
poltronas[ fila(letra_fila) ][ coluna-1 ] = 0;


// 3 - salvar no arquivo
salvar();

// atualiza tela e exibe mensagem
mostrarPoltronas();
printf("\nPoltrona liberada com sucesso!\n\n\n");
system ("pause");
}

void reservar( ) {
char letra_fila;
int coluna;
char nome[30];
char cpf[15];
int poltrona_valida = 0 ;

// 1 - pegar dados do usuario (nome e cpf)
system("cls");
printf("digite seu nome: ");
scanf("%s",nome);
printf("digite seu cpf: ");
scanf("%s",cpf);

// 2 - escolher poltrona e atualizar matriz
while ( !poltrona_valida ) {
mostrarPoltronas();

printf("Digite uma fila entre (A-F)e uma coluna entre (1-23): ");
scanf("%c %d%*c" ,&letra_fila,&coluna);

poltrona_valida = reservarPoltronas( letra_fila , coluna-1 ) ;

}

// atualizar matriz
strcpy (passageiro[ fila(letra_fila) ][ coluna-1 ].nome , nome);
strcpy (passageiro[ fila(letra_fila) ][ coluna-1 ].cpf , cpf );
passageiro[ fila(letra_fila) ][ coluna-1 ].coluna = coluna-1;
passageiro[ fila(letra_fila) ][ coluna-1 ].fila = fila(letra_fila);
poltronas[ fila(letra_fila) ][ coluna-1 ] = 1;

// 3 - salvar no arquivo
salvar();

// atualiza tela e exibe mensagem
mostrarPoltronas();
printf("\nPoltrona reservada com sucesso!\n\n\n");
system("PAUSE");
}

int fila( char fila ) {
switch ( fila ) {
case 'A': case 'a': return 0 ;
case 'B': case 'b': return 1 ;
case 'C': case 'c': return 2 ;
case 'D': case 'd': return 3 ;
case 'E': case 'e': return 4 ;
case 'F': case 'f': return 5 ;
default : return 6 ;
}
}

int reservarPoltronas ( char letra_fila , int coluna ) {

// validacao dos dados de entrada


if ( fila(letra_fila) > 5 )
{printf("\n\nFila Invalida!!\n\n");
system("pause");
return 0;
}
if ( coluna > 22 )
{ printf("\n\n Coluna Invalida!!\n\n " );
system("pause");
return 0;
}
// se poltrona ja estiver reservada, retorna 0
if ( poltronas[ fila( letra_fila ) ][ coluna ] == 1 )
{ printf("\n\nPotrona ja esta reservada.\n\n");
system("pause");
return 0;
}
// se poltrona escolhida é valida E disponível, então reserva!
poltronas[fila( letra_fila )][coluna] = 1 ;

return 1;
}


int liberarPoltronas ( char letra_fila , int coluna) {

// Liberação de dados de entrada

if ( coluna < 0 || coluna > 22 ) return 0 ;
if ( fila(letra_fila) < 0 || fila(letra_fila) > 5 ) return 0 ;

// se poltrona escolhida esta reservada , então liberar!
if ( poltronas[ fila( letra_fila ) ][ coluna ] == 0 ) return 1 ;

// se poltrona ja estiver liberada, retorna 0

poltronas[fila( letra_fila )][coluna] = 0 ;

return 0;
}

void mostrarPoltronas (){

system("cls");
printf("\n ____________________________________________________________________ \n");
printf(" A / "); mostraFila( A ) ;
printf(" B / "); mostraFila( B ) ;
printf(" C / "); mostraFila( C ) ;
printf(" |\n");
printf(" D | "); mostraFila( D ) ;
printf(" E \\ "); mostraFila( E ) ;
printf(" F \\ "); mostraFila( F ) ;
printf(" \\_____________________________________________________________________ \n");
printf(" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 \n");
printf ("\n\n");

}

void mostraFila( int coluna ) {
int i ;

for ( i=0; i<23 ; i++) {
if ( poltronas[coluna][i] == 0 ) {
printf("_ ");
} else {
printf("R ");
}
}

printf("\n");
}

void salvar(){
FILE *arquivo;

if((arquivo = fopen("aviao.txt","w")) == NULL)
{
printf("Erro ao abrir arquivo!!!\n");

}

fwrite(&passageiro,sizeof(passageiro),1 ,arquivo);
fwrite(&poltronas,sizeof(poltronas),1 ,arquivo);

fclose(arquivo);

}

void carregar(){
FILE *arquivo;

if((arquivo = fopen("aviao.txt","r")) == NULL)
{
printf("Erro ao abrir arquivo!!!\n");
return;
}

fread(&passageiro,sizeof(passageiro),1 ,arquivo);
fread(&poltronas,sizeof(poltronas),1 ,arquivo);

fclose(arquivo);

}

Link para o comentário
Compartilhar em outros sites

O problema está no uso do 'scanf()', pois mantém sujeira no buffer de entrada.

Como não é aconselhado usar a função 'fflush()' para limpeza do buffer de entrada, então faça a leitura de mais um caracter, para receber o valor da tecla 'enter' sempre que tiver uma entrada de dados via teclado.

Veja a função 'scanf()' no código abaixo:


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

#define A 0
#define B 1
#define C 2
#define D 3
#define E 4
#define F 5
#define TRUE 1
#define FALSE 0

struct passageiros {
char nome[30];
char cpf[15];
int fila ;
int coluna ;
};

// PROTOTIPOS DAS FUNCOES
void liberar() ;
void reservar() ;
void visualizar();
void mostrarPoltronas () ;
void salvar();
void carregar();
int fila( char fila ) ;
int reservarPoltronas ( char letra_fila , int coluna ) ;
void mostraFila( int coluna ) ;
int liberarPoltronas ( char letra_fila , int coluna);
void mostraFila( int coluna ) ;
int visualizarPoltronas ( char letra_fila , int coluna);


// VARIAVEIS GLOBAIS
int poltronas[6][23];
struct passageiros passageiro[6][23];
char trash; /** Leitura do enter **/

int main() {
int i,j,count;
int menu;
char opcao;
int executar_programa = TRUE;

carregar();

while ( executar_programa ) {

mostrarPoltronas();

printf(" CONSULTAR DISPONIBILIDADE DE VOO \n");
printf(" [R] RESERVAR \n");
printf(" [V] VISUALIZAR \n");
printf(" [L] LIBERAR POLTRONA \n");
printf(" [S] SAIR \n\n");
scanf("%c%c",&opcao, &trash);

switch (opcao) {
case 'r': case 'R': // reserva
reservar();
break;
case 'v': case 'V': // visualizar
visualizar();
break;
case 'l': case 'L':
liberar();
break;
case 's': case 'S':
printf(" \nSaindo...\n\n ");
executar_programa = FALSE;
break;
default:
printf("\nOPCAO INVALIDA\n\n");
system("pause");
}
}


system ("pause");
return 0;
}

void visualizar(){
char letra_fila;
int coluna;
char nome[30];
char cpf[15];
int i ;
mostrarPoltronas();

// 2 - escolher poltrona e atualizar matriz

printf("Digite uma fila entre (A-F)e uma coluna entre (1-23): ");
scanf("%c%d%c" ,&letra_fila,&coluna, &trash);


if ( poltronas[ fila(letra_fila) ][ coluna-1 ] == 0 ) {
printf("\n\n Poltrona nao esta reservada.\n\n ");
} else {
printf(" NOME: ");
printf(passageiro[ fila(letra_fila) ][ coluna-1 ].nome);
printf(" \n ");
printf(" CPF: ");
printf(passageiro[ fila(letra_fila) ][ coluna-1 ].cpf);
}



printf("\n");
system ("PAUSE");
}

void liberar () {
char letra_fila;
int coluna;
int poltrona_valida = 1 ;

while ( poltrona_valida ) {
mostrarPoltronas();

printf("Digite uma fila entre (A-F)e uma coluna entre (1-23): ");
scanf("%c%d%c" ,&letra_fila,&coluna, &trash);

if ( coluna-1>22 )
{
printf("\n Coluna invalida!! \n");
system("pause");
return;
}

if (fila(letra_fila)>5 )
{
printf("\n Fila invalida!! \n");
system("pause");
return;
}
if ( poltronas[ fila(letra_fila) ][ coluna-1 ] == 0 ) {
puts("\n\n Poltrona nao esta reservada.\n\n ");
system("pause");
return;
} else {
poltrona_valida = liberarPoltronas( letra_fila , coluna-1 ) ;
}

}

// atualizar matriz
passageiro[ fila(letra_fila) ][ coluna-1 ].coluna = coluna-1;
passageiro[ fila(letra_fila) ][ coluna-1 ].fila = fila(letra_fila);
poltronas[ fila(letra_fila) ][ coluna-1 ] = 0;


// 3 - salvar no arquivo
salvar();

// atualiza tela e exibe mensagem
mostrarPoltronas();
printf("\nPoltrona liberada com sucesso!\n\n\n");
system ("pause");
}

void reservar( ) {
char letra_fila;
int coluna = 0;
char nome[30];
char cpf[15];
int poltrona_valida = 0 ;

// 1 - pegar dados do usuario (nome e cpf)
system("cls");
printf("digite seu nome: ");
scanf("%s%c",nome,&trash);
printf("digite seu cpf: ");
scanf("%s%c",cpf, &trash);

// 2 - escolher poltrona e atualizar matriz
while ( !poltrona_valida ) {
mostrarPoltronas();

printf("Digite uma fila entre (A-F)e uma coluna entre (1-23): ");
scanf("%c%d%c", &letra_fila, &coluna, &trash);

poltrona_valida = reservarPoltronas( letra_fila , coluna-1 ) ;

}

// atualizar matriz
strcpy (passageiro[ fila(letra_fila) ][ coluna-1 ].nome , nome);
strcpy (passageiro[ fila(letra_fila) ][ coluna-1 ].cpf , cpf );
passageiro[ fila(letra_fila) ][ coluna-1 ].coluna = coluna-1;
passageiro[ fila(letra_fila) ][ coluna-1 ].fila = fila(letra_fila);
poltronas[ fila(letra_fila) ][ coluna-1 ] = 1;

// 3 - salvar no arquivo
salvar();

// atualiza tela e exibe mensagem
mostrarPoltronas();
printf("\nPoltrona reservada com sucesso!\n\n\n");
system("PAUSE");
}

int fila( char fila ) {
switch ( fila ) {
case 'A': case 'a': return 0 ;
case 'B': case 'b': return 1 ;
case 'C': case 'c': return 2 ;
case 'D': case 'd': return 3 ;
case 'E': case 'e': return 4 ;
case 'F': case 'f': return 5 ;
default : return 6 ;
}
}

int reservarPoltronas ( char letra_fila , int coluna ) {

// validacao dos dados de entrada


//printf("letra_fila: %c\nRetorno letra_fila: %d\n\n\n", letra_fila, fila(letra_fila));
if ( fila(letra_fila) > 5 )
{printf("\n\nFila Invalida!!\n\n");
system("pause");
return 0;
}
if ( coluna > 22 )
{ printf("\n\n Coluna Invalida!!\n\n " );
system("pause");
return 0;
}
// se poltrona ja estiver reservada, retorna 0
if ( poltronas[ fila( letra_fila ) ][ coluna ] == 1 )
{ printf("\n\nPotrona ja esta reservada.\n\n");
system("pause");
return 0;
}
// se poltrona escolhida é valida E disponível, então reserva!
poltronas[fila( letra_fila )][coluna] = 1 ;

return 1;
}


int liberarPoltronas ( char letra_fila , int coluna) {

// Liberação de dados de entrada

if ( coluna < 0 || coluna > 22 ) return 0 ;
if ( fila(letra_fila) < 0 || fila(letra_fila) > 5 ) return 0 ;

// se poltrona escolhida esta reservada , então liberar!
if ( poltronas[ fila( letra_fila ) ][ coluna ] == 0 ) return 1 ;

// se poltrona ja estiver liberada, retorna 0

poltronas[fila( letra_fila )][coluna] = 0 ;

return 0;
}

void mostrarPoltronas (){

system("cls");
printf("\n ____________________________________________________________________ \n");
printf(" A / "); mostraFila( A ) ;
printf(" B / "); mostraFila( B ) ;
printf(" C / "); mostraFila( C ) ;
printf(" |\n");
printf(" D | "); mostraFila( D ) ;
printf(" E \\ "); mostraFila( E ) ;
printf(" F \\ "); mostraFila( F ) ;
printf(" \\_____________________________________________________________________ \n");
printf(" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 \n");
printf ("\n\n");

}

void mostraFila( int coluna ) {
int i ;

for ( i=0; i<23 ; i++) {
if ( poltronas[coluna][i] == 0 ) {
printf("_ ");
} else {
printf("R ");
}
}

printf("\n");
}

void salvar(){
FILE *arquivo;

if((arquivo = fopen("aviao.txt","w")) == NULL)
{
printf("Erro ao abrir arquivo!!!\n");

}

fwrite(&passageiro,sizeof(passageiro),1 ,arquivo);
fwrite(&poltronas,sizeof(poltronas),1 ,arquivo);

fclose(arquivo);

}

void carregar(){
FILE *arquivo;

if((arquivo = fopen("aviao.txt","r")) == NULL)
{
printf("Erro ao abrir arquivo!!!\n");
return;
}

fread(&passageiro,sizeof(passageiro),1 ,arquivo);
fread(&poltronas,sizeof(poltronas),1 ,arquivo);

fclose(arquivo);

}

Link para o comentário
Compartilhar em outros sites

Arquivado

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

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!