Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    5

    [C]Ricerca parole in un dizionario

    Buonasera a tutti, sto scrivendo in C un programma che confronta gli argomenti della console con un dizionario per vedere se vi sono presenti, per poi stamparli nuovamente in console qualora riuscisse a trovarli.
    Il mio obiettivo sarebbe quello di stampare in console tutti gli argomenti inseriti che sono stati anche trovati nel dizionario, invece l'output del programma e' solo il primo argomento tra tutti che viene trovato nel dizionario, poi il programma si interrompe.
    Quindi se avvio il programma con gli argomenti "casa penna mano" il programma segnalera' solo casa come parola trovata nel dizionario, nonostante penna e mano siano entrambe presenti.
    (Avevo anche provato a realizzare il programma utilizzando un'intera stringa presa dalla console con scanf, ma confrontandola con il dizionario il risultato e' simile, con la differenza che in questo caso riconosce solo l'ultima parola)
    Ecco il codice, grazie in anticipo!
    codice:
    #include <stdio.h>#include <stdlib.h>
    #include <string.h>
    
    
    int main(int argc, char **argv)
    {
        FILE* dictionary = fopen("dictionary.txt", "r");
        
        int c;
        
        for (int i = 1; i < argc; i++)
        {
         while(c!=EOF)
         {
            c = getc(dictionary);
            char dictword[50];
           fscanf(dictionary, "%s", dictword);
                 
            if(strcmp(dictword, argv[i]) == 0)
            {
                printf("found %s\n", argv[i]);
                                  
            }
         }
        }
        fclose(dictionary);
        return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il ciclo for deve stare all'interno del while.

    codice:
    for(int i =1; i < argc; i++)
        {
       if(strcmp(dictword, argv[i])==0)
               {
          printf("found %s\n", argv[i]);
       }
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Il ciclo for deve stare all'interno del while.

    codice:
    for(int i =1; i < argc; i++)
        {
       if(strcmp(dictword, argv[i])==0)
               {
          printf("found %s\n", argv[i]);
       }
    }
    Grazie mille per la risposta, ora funziona perfettamente. Nel frattempo ho continuato a lavorare alla versione che non utilizza gli argomenti della console, ma una stringa che inserisce l'utente, che ovviamente puo' contenere piu' di una parola. Il problema e' sempre lo stesso, l'output si ferma alla prima parola che il dizionario riconosce.
    Ho scritto questo codice:
    codice:
    #include <stdio.h>#include <stdlib.h>
    #include <string.h>
    
    
    int main(int argc, char **argv)
    {
        
        FILE* dictionary = fopen("dictionary.txt", "r");
        char wordcheck[256];
        char dictword[45];
        scanf("%[^ \n]s", wordcheck);
        int c;
        
           
    while(c!= EOF)
        {
            c = getc(dictionary);
            
           fscanf(dictionary, "%s", dictword);
         
            if(strcmp(dictword, wordcheck) == 0)
            {
                printf("found %s\n", wordcheck);
                              
            }
            
        }
        
        fclose(dictionary);
        return 0;
        
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Hai visualizzato con una printf il contenuto di wordcheck subito dopo la scanf? Cosa ottieni?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Hai visualizzato con una printf il contenuto di wordcheck subito dopo la scanf? Cosa ottieni?
    Effettivamente ottengo sempre e solo la prima parola.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perché la scanf dopo lo spazio non accetta il resto.

    In ogni caso, anche se ci fossero tante parole, come speri di testarle tutte con una sola strcmp ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Perché la scanf dopo lo spazio non accetta il resto.
    E' vero, infatti inizialmente avevo utilizzando fgets, che considera gli spazi, ma non eseguiva neanche un singolo confronto con il dizionario purtroppo
    Quote Originariamente inviata da oregon Visualizza il messaggio
    In ogni caso, anche se ci fossero tante parole, come speri di testarle tutte con una sola strcmp ?
    Questo e' un dubbio che ho da quando ho iniziato il compito. Pensavo a questo punto di salvare le parole da cercare in un array per poi controllarle tutte con un foreach loop, ma essendo nel C da neanche un mese non so se e' possibile..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Accetta i dati in un array e usa una for. In un mese di studio avrai già affrontato i cicli for dato che è un argomento che sicuramente va prima di file e altro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.