Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    92

    [c] problema con strcmp

    Ciao a tutti... sto scrivendo un programma ke mi legga da un file una serie di titoli e ke mi dica, inserendone uno, se è presente o no.
    La prima parte, cioè quella del file la so fare, nn riesco a far confrontare le il titolo ke ho inserito con quelli già presenti...
    Vi posto il prog.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define           percorso      "C:\\Windows\\Desktop\\lista_dvd.txt"
    
    int main(void)
    {
    int           c;
    char          s[100], titolo[50];
    FILE          *f;
    if (( f = fopen(percorso, "r")) == NULL)  {
       printf("\nhai sbagliato il percorso\n");
       system("pause");
       return -1;
       }
    printf(" Inserire il titolo da cercare: \n");
    fgets(s, 100, f);
    while ((c = getchar()) != '\n')
    titolo[50] = c;
    if (! strcmp(s, titolo))    {
        printf("Si c'e l'hai\n");
        }
        else    {
        printf("No nn c'e l'hai\n");
        }
    fclose(f);
    printf("\n\n");
    system("pause");
    return 0;
    }
    Come mai nn mi confronta le stringhe?

    Ps. ho cercato qlk thread simile, ho apportato delle modifiche ma è sempre uguale, perciò vi ho postato l'originale...

  2. #2
    codice:
    printf(" Inserire il titolo da cercare: \n");
    fgets(s, 100, f);         // leggi 100 caratteri dal file
    // com'è che prima chiedi di inserire il titolo da cercare e poi leggi
    // dal file? (non capisco se è un errore oppure lo "posticipi" coscientemente)
    // cmq devi leggerne 1 in meno della dim di s, cioé 99
    
    // con queste due qua sotto che cosa fai?
    while ((c = getchar()) != '\n')
    titolo[50] = c;   // mi sa che qua c'è un errore (non capisco le tue intenzioni!
    
    if (! strcmp(s, titolo))    {
        printf("Si c'e l'hai\n");
        }
        else    {
        printf("No nn c'e l'hai\n");
        }
    ...

    fatti sentire



  3. #3
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    92
    printf(" Inserire il titolo da cercare: \n");
    fgets(s, 100, f); // leggi 100 caratteri dal file
    // com'è che prima chiedi di inserire il titolo da cercare e poi leggi
    // dal file? (non capisco se è un errore oppure lo "posticipi" coscientemente)
    // cmq devi leggerne 1 in meno della dim di s, cioé 99
    Si ho sbagliato, ho fatto confusione durante le prove, effettivamente sul listato ke ho io nn risulta...

    cmq devi leggerne 1 in meno della dim di s, cioé 99
    Si lo sapevo già grazie...


    // con queste due qua sotto che cosa fai?
    while ((c = getchar()) != '\n')
    titolo[50] = c; // mi sa che qua c'è un errore (non capisco le tue intenzioni!
    getchar prende come input i caratteri dalla tastiera fino al newline, li assegna a c, e c a titolo. ho provato a fare così:
    codice:
    while ((c = getchar()) != EOF)
    codice:
    while ((c = getchar()) != '\0')
    Ma, mi entrava in un ciclo infinito....

    Ok? Se hai qlk domanda falla, almeno vediamo di risolvere questo problema....

  4. #4
    codice:
    while ((c = getchar()) != '\n') 
    titolo[50] = c;
    char prende come input i caratteri dalla tastiera fino al newline, li assegna a c, e c a titolo.

    non mi è chiaro se con questo codice vorresti prendere una stringa e assegnarla a titolo.
    Perché ci metti "titolo[50]"?
    1. quel "50" come indice indica il 51 elemento dell'array (ricorda che partono da zero e non da uno), quindi vai oltre lo spazio dell'array stesso
    2. perché 50 fisso? Con quel codice vorresti prendere in input una stringa o mi sbaglio?
    se è così perché non fai "gets(titolo);" ?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    92
    codice:
    while ((c = getchar()) != '\n') 
    titolo[50] = c;
    Vabbè in questo caso n c'è bisogno di assegnare c a titolo[50], titolo[50] mi dovrebbe stare ad indicareke la parola titolo può contenere massimo 50 caratteri, se nn è così allora mi sto confondendo...

    se è così perché non fai "gets(titolo);" ?
    Ho provato, ma è la stessa cosa... secondo me il problema è nel confronto...

    Snake altro?





    Peppe....

  6. #6
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define percorso "leggimi.txt"
    
    int main()
    {
        char s[50], titolo[50], c, i=0;
        FILE *f;
        
        if (( f = fopen(percorso, "r")) == NULL)  
        {
            printf("\nhai sbagliato il percorso\n");
            system("pause");
            return -1;
        }
        
        printf("Inserire il titolo da cercare: ");
        fgets(s, 50, f); // fgets() aggiunge un newline al termine della stringa... (quindi le 2 stringhe non saranno mai uguali ("pippo\n" e "pippo" == diverse)
        
        i = strlen(s); // quindi lo togliamo, sostituendo '\n' con '\0' 
        s[++i]='\0';
        i=0;
        
        while ((c = getchar()) != '\n')
        {
            titolo[i] = c;  // qua bisogna assegnare un carattere per ogni posizione dell'array (tu li inserivi tutti nella stessa cella)
            i++;
        }
        
        if (! strcmp(s, titolo))         // ora il confronto funziona
            printf("Si c'e l'hai\n");
        else    
            printf("No nn c'e l'hai\n");
        
        fclose(f);
        
        printf("\n\n");
        system("pause");
        return 0;
    }
    ...Terrible warlords, good warlords, and an english song

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    92
    Johnny nn funziona, mi da sempre la stessa risposta, quella in else ..

    codice:
    char s[50 ], titolo[50 ], c, i=0 ;
    In oltre xkè hai messo i=0 come char? e poi hai messo 50 al posto di 100??

    Cmq. ancora nn va ma sono sicuro ke ci manca poco... :quote: :quote:

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    92
    Ho trovato una cosa interessante:

    codice:
    i = strlen(s); // quindi lo togliamo, sostituendo '\n' con '\0' 
        s[++i]='\0';
        i=0;
    Forze sarà a causa di questa "funzione", se mi vede solo la prima stringa, infatti se lo modifico così funziona, o quasi...

    codice:
    if (strcmp(s, titolo) == 1 )   {  
         printf("Si c'e l'hai\n");
            }
        else {
            printf("No nn c'e l'hai\n");
             }
        printf("%s", s);
        fclose(f);
        
        printf("\n\n");
        system("pause");
        return 0;
    Xò come ha detto prima mi vede solo la prima stringa (cioè il primo titolo della lista), e mi fa dunque il confronto solo con lui..

    Avete qlk idea??

  9. #9
    il mio esempio non leggeva l'intero file (era solo un esempio)
    questo è completo (n.b. src[] e title[] devono avere la stessa lunghezza altrimenti non avrebbero senso):
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define percorso "leggimi.txt"
    
    int main()
    {
        char src[50]="\0", title[50]="\0", i=0;
        FILE *fp;
    
        /* inserisco la stringa da cercare all'interno del file */    
        
        printf("Inserire il titolo da cercare: ");
        fgets(title, 50, stdin);
        
        /* apro il file in lettura */ 
        
        if ( ! (fp = fopen(percorso, "r")) )  
        {
            printf("Impossibile aprire il file\n");
            system("pause");
            return -1;
        }
        
        /* leggo il file una riga alla volta e verifico se la stringa inserita è presente */ 
                
        while ( ! feof(fp) )
        {
            fgets(src, 50, fp);
            if ( ! strcmp(src, title) )
            {
                printf("Titolo trovato\n");
                i = 1;
                break;
            }
        }
        
        fclose(fp);
        
        if(i == 0)
            printf("Titolo non trovato\n");
            
        system("pause");
        return 0;
    }
    ...Terrible warlords, good warlords, and an english song

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    92
    Scusa ma mi servono alcuni chiarimenti:

    codice:
    /* inserisco la stringa da cercare all'interno del file */    
        
        printf("Inserire il titolo da cercare: ");
        fgets(title, 50, stdin );
    Xkè usi qui fgets?
    In stdin, mi converrebbe fare un ciclo while, con la getchar?!
    es.
    codice:
    while ((c = getchar()) !='\n')


    codice:
    while ( ! feof(fp) )
    Ke significa??


    Tnx...


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 © 2024 vBulletin Solutions, Inc. All rights reserved.