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