Error in procedure case 3

-3

I have problems in my case 3 of my code in C, 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 the same.

But my code when run, gives every time the program has stopped working, I have tested in several ways.

Here is the code that I'm having problem with in case 3, the code link is also in the paste bin if it helps to understand: link

Case 3 should be a function that will receive the word (string) that the user types and see if it exists in the vector v [] that is storing this data in struct Movie with variable that represents movies

FOLLOWS CODE RESOLVED, 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;
}
    
asked by anonymous 11.06.2017 / 06:35

2 answers

-1
#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;
}
    
11.06.2017 / 20:09
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;
}
    
11.06.2017 / 20:42