Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] - Ricerca in Lettore Multimediale

    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

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    char canzone è giusto?
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Originariamente inviato da linoma
    char canzone è giusto?
    In che senso è giusto?

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    E' la stessa domanda che si pone il compilatore ho tradotto il suo warning
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Originariamente inviato da linoma
    E' la stessa domanda che si pone il compilatore ho tradotto il suo warning
    Anch'io so tradurlo, ma non so come risolvere

  6. #6
    forse il 3° parametro della funzione ricerca deve essere un char *, così quando la richiami puoi passare il puntatore canzone!

  7. #7
    Originariamente inviato da Nitro_Insane
    forse il 3° parametro della funzione ricerca deve essere un char *, così quando la richiami puoi passare il puntatore canzone!
    Hai ragione, avevo dimenticato che canzone era un vettore di caratteri e quindi nella funzione andava passato come puntatore o vettore... Ho risolto così:

    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++){ 
            trovato=strcmp(vettore[i].titolo,canzone);
                                
        }
        i--;
            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");                            
                
    }
    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.