[C] funzione gets

di il
4 risposte

[C] funzione gets

Ciao, ho un problema a leggere delle stringhe immesse da tastiera conteneti degli spazi vuoti... Ciò che mi serve è memorizzare delle stringhe in dei nodi di una linked list.. posto le dichiarazioni e una parte della funzione in questione
typedef char data[80];
typedef struct struttura{
        int codice;
        data autore;
        data titolo;};
typedef struct linked_list{
        struttura libro;
        struct linked_list *next;}li;
typedef li *link;

....

void inserisci(struttura *nuovo)
{    
     printf("Codice: ");
    scanf("%d",&(nuovo->codice));
     printf("Autore: ");
     gets(nuovo->autore);
     printf("Titolo: ");
     gets(nuovo->titolo);
          }
Il problema che riscontro è che sistematicamente (anche se inverto l'ordine tra autore e titolo) il programma ignora il primo gets; l'output sarà in questo modo " Autore: Titolo: " e mi permette di inserire solo il titolo. Da che dipende? grazie

4 Risposte

  • Re: [C] funzione gets

    Nessuno sa aiutarmi?? uff
  • Re: [C] funzione gets

    Da come mi ricordo io, la lettura di stringhe contenenti spazi vuoti è molto fastidiosa da trattare. se ne hai la possibilità, è meglio salvare ogni unica parola in un vettore di string e poi stamparlo quando ti serve, lasciano tu uno spazio vuoto.
    altrimenti usi il '_' al posto dello spazio, così non hai più problemi di questo genere...
  • Re: [C] funzione gets

    Comunque con printf/scanf/fscanf/fprintf... puoi usare un formato tipo printf("%[*/ ]s ",str) del quale nn ricordo la sintassi esatta ma ti fa leggere le stringhe anche con gli spazi.
  • Re: [C] funzione gets

    Credo sia:
    printf("blabla bla : %[* ]s", stringa);

    l'asterisco indica si ignorare i cartteri successivi compresi nelle quadre, qui lo spazio.

    Saluti.
Devi accedere o registrarti per scrivere nel forum
4 risposte