Error in case procedure 3

Asked

Viewed 69 times

-2

I’m having problems in my case 3 of my C code, it should compare the two strings with the strcmp function

filmeIgual=strcmp(filmePesquisa,v[x].nome);

and if the result is zero, if(filmeIgual == 0), the strings will be equal.

However my code when running, it is all the time that the program has stopped working, I have tested several ways.

Follow the code I’m having trouble in case 3, the code link is also in Paste bin if help understand: https://pastebin.com/F9cPyRkK

Case 3 must be a function that will receive the word (string) that the user type and see if it exists in the vector v[] that is storing this data in the struct Film with the variable that will represent films

FOLLOWS CODE SOLVED, ABRACOS.

#include <stdio.h>
#include <stdlib.h>
#define T 51 // Tamanho maximo sera 50 da constante das strings que vou utilizar
#define Tfilmes 2 // Alterar aqui nessa constante caso deseje alterar quantidade de filmes disponivel para cadastro

struct Filme
{
    char nome[T];
    char diretor[T];
    int anoLancamento, quantAtores;
    float nota;
};

void cadastraFilmes(struct Filme v[], int x) //Procedimento 1 cadastra filmes ao vetor
    {
        if(x < Tfilmes) // Controla quantidade maxima de filmes segundo constante Tfilmes
        {
                printf("Digite o nome do filme: ");
                gets(v[x].nome);
                printf("Digite o nome do diretor: ");
                gets(v[x].diretor);
                printf("Digite o ano do lancamento do filme: ");
                scanf("%d%*c",&v[x].anoLancamento);
                while(v[x].anoLancamento < 2010) // Verifica se o ano de lancamento digitado e superior a 2010
                    {
                        printf("\nSo podem ser cadastrados filmes lancados a partir de 2010, tente novamente!\n");
                        printf("\nDigite o ano do lancamento do filme: ");
                        scanf("%d%*c",&v[x].anoLancamento);
                    }
                printf("Digite a quantidade de atores: ");
                scanf("%d%*c",&v[x].quantAtores);
                printf("Digite a nota recebida pela critica: ");
                scanf("%f%*c",&v[x].nota);
                printf("\n");
                printf("\tFilme cadastrado com sucesso!\n\n"); // Confirmacao de cadastro efetuado com sucesso
                system("pause");
        }
        else // Se a quantidade maxima de filmes já estiver sido cadastradaa, avisa o usuario e nao deixa o mesmo cadastrar mais
        {
            printf("\t\nQuantidade maxima de filmes ja cadastrada no vetor!\n\n");
            system("pause");
        }
    }

void diretorAno(struct Filme v[]) // Procedimento 2 pesquisa se a string nomeDiretor digitada e a data de lancamento desejada existem
    {
            char nomeDiretor[T];
            int x,pesquisaAno,nomeDiretorIgual;
            printf("Digite o nome do diretor para pesquisa: ");
            gets(nomeDiretor);
            printf("Digite a data de lancamento desejada: ");
            scanf("%d%*c",&pesquisaAno);
            for(x=0;x<Tfilmes;x++)
            {
                nomeDiretorIgual=strcmp(nomeDiretor,v[x].diretor); // funcao strcmp verifica se duas strings sao iguais
                if(nomeDiretorIgual == 0 && pesquisaAno == v[x].anoLancamento) // se nome diretor e data lancamento forem iguais as digitadas e existirem no vetor, lista na tela
                    {
                        printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n");
                        printf("\n\tNome do filme: %s", v[x].nome);
                        printf("\n\tNome do diretor: %s", v[x].diretor);
                        printf("\n\tAno de lancamento do filme: %d", v[x].anoLancamento);
                        printf("\n\tQuantidade de atores: %d", v[x].quantAtores);
                        printf("\n\tNota recebida pela critica: %.2f\n", v[x].nota);
                        printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n\n");
                        system("pause");
                    }
                else // caso nao sejam encontrados e mostrado na tela a negativa
                    {
                        printf("\t\nDiretor e data de lancamento nao encontradas, por favor tente novamente.\n\n");
                        system("pause");
                    }
            }
    }

void nomesFilme(struct Filme v[]) // Procedimento 3 pesquisara se o nome informado de filme existe
    {
            char nome[T];
            int x, filmeIgual;
            char filmePesquisa[Tfilmes];
            printf("Digite o nome do filme para pesquisa: ");
            gets(filmePesquisa);
            for(x=0;x<Tfilmes;x++) // percorre vetor com limite maximo definido pela constante la em cima
            {
                filmeIgual=strcmp(filmePesquisa,v[x].nome); // funcao strcmp compara 2 strings
                if(filmeIgual == 0) // se o da strcmp for zero, significa que sao iguais
                    {
                        printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n");
                        printf("\n\tNome do filme: %s", v[x].nome);
                        printf("\n\tNome do diretor: %s", v[x].diretor);
                        printf("\n\tAno de lancamento do filme: %d", v[x].anoLancamento);
                        printf("\n\tQuantidade de atores: %d", v[x].quantAtores);
                        printf("\n\tNota recebida pela critica: %.2f\n", v[x].nota);
                        printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n\n");
                        system("pause");
                    }
                else // se nao for igual, neste caso, ja podemos definir que o filme nao foi encontrado no vetor
                    {
                        printf("\t\nFilme nao encontrado.\n\n");
                        system("pause");
                    }
            }
    }

void mostraFilmes(struct Filme v[]) // Procedimento 4 que vai listar todos os filmes ja cadastrados no vetor
    {
        int x;
        for(x=0;x<Tfilmes;x++)
        {
            printf("\n================================================\n");
            printf("\n\tNome do filme: %s", v[x].nome);
            printf("\n\tNome do diretor: %s", v[x].diretor);
            printf("\n\tAno de lancamento do filme: %d", v[x].anoLancamento);
            printf("\n\tQuantidade de atores: %d", v[x].quantAtores);
            printf("\n\tNota recebida pela critica: %.2f\n", v[x].nota);
            printf("\n================================================\n");
        }
        system("pause");
    }

int menu() // Menu central
    {
        int z;
        printf("\n================================================\n");
        printf("\n\n\t\tMENU:\n");
        printf("\n\tDigite a opcao desejada:\n");
        printf("\n\t(1) Cadastrar Filme \n");
        printf("\n\t(2) Pesquisar por ano e diretor \n");
        printf("\n\t(3) Pesquisar por nome do filme \n");
        printf("\n\t(4) Lista todos os filmes cadastrados \n");
        printf("\n\t(5) Sair\n\n");
        printf("\n================================================\n");
        scanf("%d%*c", &z);
        system("cls");
        return z;
    }

int main()
{
    int x=0;
    int op;
    struct Filme filmes[Tfilmes];
    do
    {
        op=menu();
        switch(op)
        {
            case 1:
                cadastraFilmes(filmes,x);
                x++;
                system("cls");
                break;
            case 2:
                diretorAno(filmes);
                system("cls");
                break;
            case 3:
                nomesFilme(filmes);
                system("cls");
                break;
            case 4:
                mostraFilmes(filmes);
                system("cls");
                break;
            case 5:
                system("pause");
                break;
            default:
                printf("\n\tOpcao invalida, tente novamente.\n");
                break;
        }
    }while(op!=5); // coloquei este while e coloquei tambem um case 5 la no menu, nao precisaria portanto o case 5 SE eu nao quisesse colocar um system pause que com o mesmo fica mais claro que o programa foi finalizado.

return 0;
}
  • Run the program with a debbuger and see the error that appears.

2 answers

0


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define _CRT_SECURE_NO_WARNINGS
#define T 51
#define Tfilmes 2

struct Filme
{
    char nome[T];
    char diretor[T];
    int anoLancamento, quantAtores;
    float nota;
};
void cadastraFilmes(struct Filme v[], int x)
{
    if (x < Tfilmes)
    {
        printf("Digite o nome do filme: ");
        gets(v[x].nome);
        printf("Digite o nome do diretor: ");
        gets(v[x].diretor);
        printf("Digite o ano do lancamento do filme: ");
        scanf("%d%*c", &v[x].anoLancamento);
        while (v[x].anoLancamento < 2010)
        {
            printf("\nSo podem ser cadastrados filmes lancados a partir de 2010, tente novamente!\n");
            printf("\nDigite o ano do lancamento do filme: ");
            scanf("%d%*c", &v[x].anoLancamento);
        }
        printf("Digite a quantidade de atores: ");
        scanf("%d%*c", &v[x].quantAtores);
        printf("Digite a nota recebida pela critica: ");
        scanf("%f%*c", &v[x].nota);
        printf("\n");
        printf("\tFilme cadastrado com sucesso!\n\n");
        system("pause");
    }
    else
    {
        printf("\t\nQuantidade maxima de filmes ja cadastrada no vetor!\n\n");
        system("pause");
    }
}

void mostraFilmes(struct Filme v[])
{
    int x;
    for (x = 0; x<Tfilmes; x++)
    {
        printf("\n================================================\n");
        printf("\n\tNome do filme: %s", v[x].nome);
        printf("\n\tNome do diretor: %s", v[x].diretor);
        printf("\n\tAno de lancamento do filme: %d", v[x].anoLancamento);
        printf("\n\tQuantidade de atores: %d", v[x].quantAtores);
        printf("\n\tNota recebida pela critica: %.2f\n", v[x].nota);
        printf("\n================================================\n");
    }


}
void diretorAno(struct Filme v[])
{
    char nomeDiretor[T];
    int x, pesquisaAno, nomeDiretorIgual;
    printf("Digite o nome do diretor para pesquisa: ");
    gets(nomeDiretor);
    printf("Digite a data de lancamento desejada: ");
    scanf("%d%*c", &pesquisaAno);
    for (x = 0; x<Tfilmes; x++)
    {

        nomeDiretorIgual = strcmp(nomeDiretor, v[x].diretor);
        if (nomeDiretorIgual == 0 && pesquisaAno == v[x].anoLancamento)
        {
            printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n");
            printf("\n\tNome do filme: %s", v[x].nome);
            printf("\n\tNome do diretor: %s", v[x].diretor);
            printf("\n\tAno de lancamento do filme: %d", v[x].anoLancamento);
            printf("\n\tQuantidade de atores: %d", v[x].quantAtores);
            printf("\n\tNota recebida pela critica: %.2f\n", v[x].nota);
            printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n\n");
            system("pause");
        }
        else
        {
            printf("\t\nDiretor e data de lancamento nao encontradas, por favor tente novamente.\n\n");
            system("pause");
        }
    }

}
void nomesFilme(struct Filme v[])
{
    char nome[T];
    int x, filmeIgual;
    char filmePesquisa[Tfilmes];
    printf("Digite o nome do filme para pesquisa: ");
    gets(filmePesquisa);
    for (x = 0; x<Tfilmes; x++)
    {
        filmeIgual = strcmp(filmePesquisa, v[x].nome);
        if (filmeIgual == 0)
        {
            printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n");
            printf("\n\tNome do filme: %s", v[x].nome);
            printf("\n\tNome do diretor: %s", v[x].diretor);
            printf("\n\tAno de lancamento do filme: %d", v[x].anoLancamento);
            printf("\n\tQuantidade de atores: %d", v[x].quantAtores);
            printf("\n\tNota recebida pela critica: %.2f\n", v[x].nota);
            printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n\n");
            system("pause");
        }
        else
        {
            printf("\t\nFilme nao encontrado.\n\n");
            system("pause");
        }
    }

}
int menu()
{
    int z;
    printf("\n================================================\n");
    printf("\n\n\t\tMENU:\n");
    printf("\n\tDigite a opcao desejada:\n");
    printf("\n\t(1) Cadastrar Filme \n");
    printf("\n\t(2) Pesquisar por ano e diretor \n");
    printf("\n\t(3) Pesquisar por nome do filme \n");
    printf("\n\t(4) Lista todos os filmes cadastrados \n");
    printf("\n\t(5) Sair\n\n");
    printf("\n================================================\n");
    scanf("%d%*c", &z);
    system("cls");
    return z;
}
int main()
{
    int x = 0;
    int op;
    struct Filme filmes[Tfilmes];
    do
    {
        op = menu();
        switch (op)
        {
        case 1:
            cadastraFilmes(filmes, x);
            x++;
            system("cls");
            break;
        case 2:
            diretorAno(filmes);
            system("cls");
            break;

        case 3:
            nomesFilme(filmes);
            system("cls");
            break;
        case 4:
            mostraFilmes(filmes);
            system("cls");
            break;
        case 5:
            system("pause");
            break;
        default:
            printf("\n\tOpcao invalida, tente novamente.\n");
            break;
        }
    } while (op != 5);

    return 0;
}
  • It worked Claudio, very grateful, I was declaring as int the variable string, but now the case 4 stopped working, nothing happens when the digit, I edited the code and commented all of it to be clearer, but again thank you!

  • You want me to get case 4 ??

  • In fact, I wanted a help of what is happening with my vector in case 4 because before funfava and now nothing is not answering too, it only shows the filled vector, now as I arranged the case 3, I do not know why it seems that there is nothing stored in the vector, but this filling right the case 1

  • 1

    OK I’ll just read the code

  • @Claudio instead of writing in another reply, it is recommended that you edit this.

  • 1

    Thank you still beginner on the site

  • 2

    I noticed that you are new and have good intentions on the site, but I recommend that before answering some questions, take a look at [Ask] and [Answer].

Show 2 more comments

0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define _CRT_SECURE_NO_WARNINGS
#define T 51
#define Tfilmes 2

struct Filme
{
    char nome[T];
    char diretor[T];
    int anoLancamento, quantAtores;
    float nota;
};
void cadastraFilmes(struct Filme v[], int x)
{
    if (x < Tfilmes)
    {
        printf("Digite o nome do filme: ");
        gets(v[x].nome);
        printf("Digite o nome do diretor: ");
        gets(v[x].diretor);
        printf("Digite o ano do lancamento do filme: ");
        scanf("%d%*c", &v[x].anoLancamento);
        while (v[x].anoLancamento < 2010)
        {
            printf("\nSo podem ser cadastrados filmes lancados a partir de 2010, tente novamente!\n");
            printf("\nDigite o ano do lancamento do filme: ");
            scanf("%d%*c", &v[x].anoLancamento);
        }
        printf("Digite a quantidade de atores: ");
        scanf("%d%*c", &v[x].quantAtores);
        printf("Digite a nota recebida pela critica: ");
        scanf("%f%*c", &v[x].nota);
        printf("\n");
        printf("\tFilme cadastrado com sucesso!\n\n");
        system("pause");
    }
    else
    {
        printf("\t\nQuantidade maxima de filmes ja cadastrada no vetor!\n\n");
        system("pause");
    }
}

void mostraFilmes(struct Filme v[])
{
    int x;

    for (x = 0; x<Tfilmes; x++)
    {
        printf("\n================================================\n");
        printf("\n\tNome do filme: %s", v[x].nome);
        printf("\n\tNome do diretor: %s", v[x].diretor);
        printf("\n\tAno de lancamento do filme: %d", v[x].anoLancamento);
        printf("\n\tQuantidade de atores: %d", v[x].quantAtores);
        printf("\n\tNota recebida pela critica: %.2f\n", v[x].nota);
        printf("\n================================================\n");
        system("pause");
    }


}
void diretorAno(struct Filme v[])
{
    char nomeDiretor[T];
    int x, pesquisaAno, nomeDiretorIgual;
    printf("Digite o nome do diretor para pesquisa: ");
    gets(nomeDiretor);
    printf("Digite a data de lancamento desejada: ");
    scanf("%d%*c", &pesquisaAno);
    for (x = 0; x<Tfilmes; x++)
    {

        nomeDiretorIgual = strcmp(nomeDiretor, v[x].diretor);
        if (nomeDiretorIgual == 0 && pesquisaAno == v[x].anoLancamento)
        {
            printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n");
            printf("\n\tNome do filme: %s", v[x].nome);
            printf("\n\tNome do diretor: %s", v[x].diretor);
            printf("\n\tAno de lancamento do filme: %d", v[x].anoLancamento);
            printf("\n\tQuantidade de atores: %d", v[x].quantAtores);
            printf("\n\tNota recebida pela critica: %.2f\n", v[x].nota);
            printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n\n");
            system("pause");
        }
        else
        {
            printf("\t\nDiretor e data de lancamento nao encontradas, por favor tente novamente.\n\n");
            system("pause");
        }
    }

}
void nomesFilme(struct Filme v[])
{
    char nome[T];
    int x, filmeIgual;
    char filmePesquisa[Tfilmes];
    printf("Digite o nome do filme para pesquisa: ");
    gets(filmePesquisa);
    for (x = 0; x<Tfilmes; x++)
    {
        filmeIgual = strcmp(filmePesquisa, v[x].nome);
        if (filmeIgual == 0)
        {
            printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n");
            printf("\n\tNome do filme: %s", v[x].nome);
            printf("\n\tNome do diretor: %s", v[x].diretor);
            printf("\n\tAno de lancamento do filme: %d", v[x].anoLancamento);
            printf("\n\tQuantidade de atores: %d", v[x].quantAtores);
            printf("\n\tNota recebida pela critica: %.2f\n", v[x].nota);
            printf("\n=================DIRETOR E DATAS DE LANCAMENTOS ENCONTRADOS===========================\n\n");
            system("pause");
        }
        else
        {
            printf("\t\nFilme nao encontrado.\n\n");
            system("pause");
        }
    }

}
int menu()
{
    int z;
    printf("\n================================================\n");
    printf("\n\n\t\tMENU:\n");
    printf("\n\tDigite a opcao desejada:\n");
    printf("\n\t(1) Cadastrar Filme \n");
    printf("\n\t(2) Pesquisar por ano e diretor \n");
    printf("\n\t(3) Pesquisar por nome do filme \n");
    printf("\n\t(4) Lista todos os filmes cadastrados \n");
    printf("\n\t(5) Sair\n\n");
    printf("\n================================================\n");
    scanf("%d%*c", &z);
    system("cls");
    return z;
}
int main()
{
    int x = 0;
    int op;
    struct Filme filmes[Tfilmes];
    do
    {
        op = menu();
        switch (op)
        {
        case 1:
            cadastraFilmes(filmes, x);
            x++;
            system("cls");
            break;
        case 2:
            diretorAno(filmes);
            system("cls");
            break;

        case 3:
            nomesFilme(filmes);
            system("cls");
            break;
        case 4:
            mostraFilmes(filmes);
            system("cls");
            break;
        case 5:
            system("pause");
            break;
        default:
            printf("\n\tOpcao invalida, tente novamente.\n");
            break;
        }
    } while (op != 5);

    return 0;
}
  • What’s different about this code from the other answer? Why not edit the one you already answered?

  • 1

    In this Answer case 4 shows all vector data that before did not give.

  • I don’t see the need for a new answer to such a small change. It would be better to edit the other’s code.

  • I understood the system pause Claudio, but she has to be used case 4, show ALL movies at once, and the system pause will make me have to keep pressing some key to show the next registered film understands

Browser other questions tagged

You are not signed in. Login or sign up in order to post.