Salve, sto svolgendo questa traccia:
Progettare ed implementare un programma in grado di
1. acquisire da tastiera il vettore playlist; ogni elemento di playlist e’ un record (struttura), di nome
song, composto da tre campi:
titolo 20 caratteri; autore 20 caratteri; genere 10 caratteri.
Utilizzando un menu’ di input consentire:
2. La ricerca di una canzone per titolo (se trovata visualizzarne anche autore e genere).
3. La visualizzazione del numero di canzoni appartenente ad ogni genere.
4. Salvare il vettore playlist nel file compilation;
5. Uscita
Ma ho problemi nell'implementare la ricerca, infatti una volta chiamata la funzione ricerca(), chiamata la funzione strcmp() si blocca il programma... Ecco il codice:
codice:
#include <stdio.h>
#include <string.h>
struct song{
char titolo[20];
char autore[20];
char genere[10];
};
typedef struct song Brano;
//prototipi
void lettura(Brano *vettore, int elem);
void stampa(Brano *vettore, int elem);
void ricerca(Brano *vettore, int elem, char canzone);
int main ()
{
int elem;
char canzone[20];
int i;
printf("Inserisci il numero di canzoni da includere nella Playlist: ");
scanf("%d",&elem);
Brano vettore[elem];
fflush(stdin);
lettura(vettore,elem);
stampa(vettore,elem);
//STAMPA IL MENU
printf("\n1. Ricerca brano per titolo;\n");
printf("2. Visualizzazione numero canzoni per genere;\n");
printf("3. Salva la playlist nel file compilation;\n");
printf("4. Esci.\n");
int scelta;
scanf("%d",&scelta);
switch(scelta){
case 1:
printf("Inserisci il nome del brano da cercare:\n");
fflush(stdin);
gets(canzone);
ricerca(vettore,elem,canzone);
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
printf("\nScelta non consentita!\n");
}
system("pause");
return 0;
}
void lettura(Brano *vettore, int elem){
int i;
for(i=0;i<elem;i++){
printf("\nBrano numero %d\n",i+1);
printf("Titolo: ");
gets(vettore[i].titolo);
printf("Autore: ");
gets(vettore[i].autore);
printf("Genere: ");
gets(vettore[i].genere);
}
}
void stampa(Brano *vettore, int elem){
int i;
printf("\nHai inserito questi brani\n");
for(i=0;i<elem;i++){
printf("Titolo: %s\n",vettore[i].titolo);
printf("Autore: %s\n",vettore[i].autore);
printf("Genere: %s\n",vettore[i].genere);
}
}
void ricerca(Brano *vettore, int elem, char canzone){
int i;
int trovato=1;
for(i=0;i<elem && trovato!=0;i++){
printf("%d ",i);
trovato=strcmp(vettore[i].titolo,canzone);
}
if(trovato==0){
printf("Brano trovato!\n");
printf("Titolo: %s\n",vettore[i].titolo);
printf("Autore: %s\n",vettore[i].autore);
printf("Genere: %s\n",vettore[i].genere);
}
else
printf("Brano non trovato!\n");
}
Inoltre il dev c++ mi restituisce questi warnings:
codice:
C:\Documents and Settings\Deleted\Desktop\Lettore Musicale.c In function `main':
46 C:\Documents and Settings\Deleted\Desktop\Lettore Musicale.c [Warning] passing arg 3 of `ricerca' makes integer from pointer without a cast
C:\Documents and Settings\Deleted\Desktop\Lettore Musicale.c In function `ricerca':
98 C:\Documents and Settings\Deleted\Desktop\Lettore Musicale.c [Warning] passing arg 2 of `strcmp' makes pointer from integer without a cast
Come posso risolvere i problemi e i warnings?
Grazie