Why does the leValidaText function return garbage?

0
  

I'm trying to validate the car's board, but I can not. I tried using scanf instead of fgets and nothing. I have no idea what might be causing the problem.

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



/* 
Lucas Correia Barros
Síntese
Objetivo: Cadastrar carros de um colecionador
Entrada: Placa do carro e valor de aquisição
Saída: Carro cadastrado (C), listagem(L) dos carros cadastrados ate o momento, que contenham na placa as tres primeiras
letras da placa especificada, e encerramento(E), mensagem caso seja tentado o cadastramento de carros acima do máximo
permitido (Cadastro cheio)
 */

#define MAX_CARROS 200
#define MAX_PLACA 7
#define MIN_PLACA 7
#define MAX_VALOR 999999

//Le e valida opcao
char opcaoDesejada();
//Le e valida placa
void leValidaTexto(int valorMin, int valorMax, char texto[]);
int verificaPlaca(char placa[]);
char validaPlacaRepetido(int contadorCarros,char placas[][MAX_PLACA],char placa[]);


int main(){

    char opcao, placas[MAX_CARROS][MAX_PLACA]={0}, placa[MAX_PLACA]={0};
    float valor_aquisicao[MAX_CARROS];
    int contadorCarros=0, placaFlag=0, repetido=0;




    do{
        opcao = opcaoDesejada();
        system("cls");
        switch(opcao){
            case 'c':
                if(contadorCarros > MAX_CARROS){
                    printf("CADASTRO CHEIO!");
                }
                else
                    {
                        printf("Veiculo n%c %d\n", 167, contadorCarros+1);


                        leValidaTexto(MIN_PLACA, MAX_PLACA, placa);
                        printf("%s", leValidaTexto);
                        placaFlag = verificaPlaca(placa);


                        do{

                        repetido=validaPlacaRepetido(contadorCarros,placas,placa);

                        if((repetido)== 1 || (placaFlag==0)){
                            printf(" Placa ja existe \n");

                        }else{
                            strcpy(placas[contadorCarros],placa);
                        }

                        }while((repetido)== 1 || (placaFlag==0));

                        contadorCarros++;
                    }
        }


    }while(opcao != 'e');

    return 0;   
}

char opcaoDesejada(){

        char opcao;

        do{
            printf("\nCADASTRO DE AUTOMOVEIS\n\n");
            printf("C - CADASTRE UM CARRO\n");
            printf("L - LISTE OS CARROS CADASTRADOS\n");
            printf("E- ENCERRE O PROGRAMA\n");
            scanf(" %c", &opcao);
            opcao = tolower(opcao);
            if(opcao != 'c' && opcao != 'l' && opcao != 'e'){
                printf("\nOpcao desejada invalida. Tente novamente: ");
                }
        }while(opcao != 'c' && opcao != 'l' && opcao != 'e');

        return opcao;
    }

void leValidaTexto(int valorMin, int valorMax, char texto[]){

    do{
        printf("Digite a placa do veiculo:");
        fflush(stdin);
        fgets(texto, valorMax+1, stdin);

        if(texto[strlen(texto)-1] == '\n'){
            texto[strlen(texto)-1] = '
#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
#include <ctype.h>



/* 
Lucas Correia Barros
Síntese
Objetivo: Cadastrar carros de um colecionador
Entrada: Placa do carro e valor de aquisição
Saída: Carro cadastrado (C), listagem(L) dos carros cadastrados ate o momento, que contenham na placa as tres primeiras
letras da placa especificada, e encerramento(E), mensagem caso seja tentado o cadastramento de carros acima do máximo
permitido (Cadastro cheio)
 */

#define MAX_CARROS 200
#define MAX_PLACA 7
#define MIN_PLACA 7
#define MAX_VALOR 999999

//Le e valida opcao
char opcaoDesejada();
//Le e valida placa
void leValidaTexto(int valorMin, int valorMax, char texto[]);
int verificaPlaca(char placa[]);
char validaPlacaRepetido(int contadorCarros,char placas[][MAX_PLACA],char placa[]);


int main(){

    char opcao, placas[MAX_CARROS][MAX_PLACA]={0}, placa[MAX_PLACA]={0};
    float valor_aquisicao[MAX_CARROS];
    int contadorCarros=0, placaFlag=0, repetido=0;




    do{
        opcao = opcaoDesejada();
        system("cls");
        switch(opcao){
            case 'c':
                if(contadorCarros > MAX_CARROS){
                    printf("CADASTRO CHEIO!");
                }
                else
                    {
                        printf("Veiculo n%c %d\n", 167, contadorCarros+1);


                        leValidaTexto(MIN_PLACA, MAX_PLACA, placa);
                        printf("%s", leValidaTexto);
                        placaFlag = verificaPlaca(placa);


                        do{

                        repetido=validaPlacaRepetido(contadorCarros,placas,placa);

                        if((repetido)== 1 || (placaFlag==0)){
                            printf(" Placa ja existe \n");

                        }else{
                            strcpy(placas[contadorCarros],placa);
                        }

                        }while((repetido)== 1 || (placaFlag==0));

                        contadorCarros++;
                    }
        }


    }while(opcao != 'e');

    return 0;   
}

char opcaoDesejada(){

        char opcao;

        do{
            printf("\nCADASTRO DE AUTOMOVEIS\n\n");
            printf("C - CADASTRE UM CARRO\n");
            printf("L - LISTE OS CARROS CADASTRADOS\n");
            printf("E- ENCERRE O PROGRAMA\n");
            scanf(" %c", &opcao);
            opcao = tolower(opcao);
            if(opcao != 'c' && opcao != 'l' && opcao != 'e'){
                printf("\nOpcao desejada invalida. Tente novamente: ");
                }
        }while(opcao != 'c' && opcao != 'l' && opcao != 'e');

        return opcao;
    }

void leValidaTexto(int valorMin, int valorMax, char texto[]){

    do{
        printf("Digite a placa do veiculo:");
        fflush(stdin);
        fgets(texto, valorMax+1, stdin);

        if(texto[strlen(texto)-1] == '\n'){
            texto[strlen(texto)-1] = '%pre%';
        }

        if(strlen(texto)<valorMin || strlen(texto)<valorMax){
            printf("Placa invalida");
        }
    }while(strlen(texto)<valorMin || strlen(texto)<valorMax);
}

int verificaPlaca(char placa[]){

    int cont,flag=1;

    for(cont=0;cont<7;cont++){

      if(cont<3){
        if(!isalpha(placa[cont])){
            flag=0;
            break;

        }
    }else
        if(!isdigit(placa[cont])){
        flag=0;
        break;      
        }

    }
    return flag;
}

char validaPlacaRepetido(int contadorCarros,char placas[][MAX_PLACA],char placa[]){
    int repetido=0,cont;

    for(cont=0;cont<=contadorCarros;cont++){
        if(stricmp(placas[cont],placa)==0){
            repetido = 1;
            return repetido;

        }
    }
    return repetido;
}   
'; } if(strlen(texto)<valorMin || strlen(texto)<valorMax){ printf("Placa invalida"); } }while(strlen(texto)<valorMin || strlen(texto)<valorMax); } int verificaPlaca(char placa[]){ int cont,flag=1; for(cont=0;cont<7;cont++){ if(cont<3){ if(!isalpha(placa[cont])){ flag=0; break; } }else if(!isdigit(placa[cont])){ flag=0; break; } } return flag; } char validaPlacaRepetido(int contadorCarros,char placas[][MAX_PLACA],char placa[]){ int repetido=0,cont; for(cont=0;cont<=contadorCarros;cont++){ if(stricmp(placas[cont],placa)==0){ repetido = 1; return repetido; } } return repetido; }
    
asked by anonymous 08.04.2018 / 20:57

1 answer

0

Your code still seems to be in development and I believe you are still learning, otherwise you might be using something more elaborate like structs , so I believe you have some limitations to doing this exercise. p>

Considering this, I will answer your question directly:

leValidaTexto(MIN_PLACA, MAX_PLACA, placa);
printf("%s", leValidaTexto);

You're trying to print the function leValidaText as if it were a string, and it does not return anything, it's not being called in printf. However, you send the plate string to the function and it is there that the card is stored, you immediately on the line next to this printf realizes this because it uses the that is, where the string that the user typed was correctly saved:

placaFlag = verificaPlaca(placa);

So, instead of trying to print the function as if it were a string, print the tag variable:

leValidaTexto(MIN_PLACA, MAX_PLACA, placa);
printf("%s", placa);
    
08.04.2018 / 23:43