PDA

View Full Version : [C]Problema con input da tastiera e scrittura su file .txt


fix87
19-05-2012, 12:41
Salve a tutti,
devo creare una rubrica telefonica per un progetto e non riesco a fare la seguente operazione:
inserisco tramite una scanf una stringa contenente (cognome, nome e telefono) e questa stringa deve essere ricopiata su un file.
Il problema è il seguente, la stringa viene copiata sul file ma senza gli spazi. Posto il pezzettino di codice interessato:

int addContact()
{
FILE *stream;
char contact[100];
printf("Inserisci cognome, nome e numero di telefono:\n");
scanf("%s",contact); //ho provato anche con "%s[^\n]" ma non va
stream=fopen("rubrica.txt","a");
fprintf(stream,"%s",contact);
fclose(stream);
return 0;
}

Quale sarebbe il problema secondo voi?

Mettiu_
19-05-2012, 14:57
Il problema è che scanf() legge fino allo spazio bianco quindi se vuoi prendere tre stringhe intervallate da un numero qualunque di spazi devi fare qualcosa del genere:
char nome[DIM];
char cognome[DIM];
char tel[DIM];
printf("Inserisci cognome, nome e numero di telefono:\n");
scanf("%s %s %s", nome, cognome, tel);

In alternativa potresti usare funzioni tipo gets() per prendere una stringa contenente anche gli spazi.

fix87
19-05-2012, 15:27
Ti ringrazio vivamente, l'ho appena scritto mezz'ora fa esattamente come la tua :D Volendo invece farla con fgets(), quale sarebbe il codice?

Mettiu_
19-05-2012, 15:36
Ti ringrazio vivamente, l'ho appena scritto mezz'ora fa esattamente come la tua :D Volendo invece farla con fgets(), quale sarebbe il codice?

Prego! Se vuoi usare fgets() dovresti fare qualcosa del genere:

char buffer[DIM];
fgets(buffer, DIM-1, stdin);


Che è anche più sicuro perchè così specifichi la dimensione del buffer e non hai problemi di sicurezza, buffer overflow e altre amenità di questo tipo. :)

fix87
19-05-2012, 16:20
Non so perchè ma non mi va, nel senso che non mi fa immettere i dati in input da tastiera. Vabbè cmq ho risolto, per quello che devo fare io va bene anche una scanf(). Ti ringrazio per la disponibilità!