C: leggere una serie di parole

di il
8 risposte

C: leggere una serie di parole

Ciao,
ho un problema con la scanf come faccio a leggere una serie di parole in input?
esempio se ho in input in serie: ciao io sto andando
posso usare un ciclo while e leggere con lo scanf?



Grazie

8 Risposte

  • Re: C: leggere una serie di parole

    maxilrosso ha scritto:


    Puoi anche leggere in un'unica scanf e poi spezzare la stringa in piú stringhe
    non ho capito
    ho nella stessa riga una sequenza di parole se faccio scanf legge solo una.
    per memorizzarle ho char **parole;
    parole=malloc(N*sizeof(char *)); //alloco dinamicamente
    ma poi devo leggere le singole parole e poter lavorare su di essere singolarmente
  • Re: C: leggere una serie di parole

    ...forse è una soluzione un po' sbrigativa, ma io userei la funzione .

    Semplice esempio:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
    
          char *s = calloc(64, sizeof(char));
    
          fgets(s, 64, stdin);
          printf("%s\n", s);
       
          return (0);
    
    }
  • Re: C: leggere una serie di parole

    Non posso xche devo trattare singolarmente ogni parola..
  • Re: C: leggere una serie di parole

    Non posso xche devo trattare singolarmente ogni parola..
  • Re: C: leggere una serie di parole

    bramar78 ha scritto:


    ...devo trattare singolarmente ogni parola..
    Anche con la funzione scanf( ) puoi leggere - un testo scritto su un'unica riga - contenente più parole separate da uno spazio (0x20), per quel che ne so purché tu ne conosca preliminarmente il numero totale, ossia nella modalità ad esempio che segue:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    int main() {
    
          char *s1, *s2, *s3, *s4;
    
          s1 = calloc(16, sizeof(char));
          s2 = calloc(16, sizeof(char));
          s3 = calloc(16, sizeof(char));
          s4 = calloc(16, sizeof(char));
    
          scanf("%s %s %s %s", s1, s2, s3, s4);
    
    /* Verifica dei risultati */
          printf("%s %s %s %s\n", s1, s2, s3, s4);
    
          free(s1);
          free(s2);
          free(s3);
          free(s4);
       
          return (0);
    
    }
    In questo esempio il testo immesso deve contenere massimo 4 parole, che possono essere comunque gestite mediante le variabili di tipo Puntatore di riferimento.
  • Re: C: leggere una serie di parole

    Si questo ero riuscita ma se non ho idea di quante siano le stringhe devo fare tutto in maniera dinamica utilizzando un ciclo.
    E' questa parte che va in errore. Leggere un numero di stringhe prefissate è ok.

    Non so se ho spiegato bene il problema ma tratta di numero di stringhe da leggere in input del tipo:
    ciao mi chiamo pippo come va e tu e sto cercando la parola piu lunga
    una sequenza di parole da leggere scritte sulla stessa linea
  • Re: C: leggere una serie di parole

    Suggerirei, dunque, l'uso della funzione fgets combinata con la funzione per "spezzettare" il testo, immesso nello standard input, nelle sue parole costituenti sulla base del carattere dello spazio (0x20).

    Semplice esempio:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define LUNG 512
    
    int main() {
    
          char *s = calloc(LUNG, sizeof(char));
          const char spz[2] = " ";
          char *token;
    
    /* Legge dallo stdin una sequenza alfanumerica anche eventualmente contenente spazi */
          fgets(s, LUNG, stdin);
    
    /* Procede a distinguere le parole del testo avendo come "separatore" il carattere dello spazio */
          token = strtok(s, spz);
    
          while( token != NULL ) {
                printf( "%s\n", token );         // Verifica il risultato
                token = strtok(NULL, spz);
          }
          
          free(s);
    
          return (0);
    
    }
  • Re: C: leggere una serie di parole

    Ok...Nn ho mai usato questa funzione.
    Grazie x il suggerimento
Devi accedere o registrarti per scrivere nel forum
8 risposte