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;
}