[C] Rubrica telefonica

Pubblicità
fflush pulisce il buffer dello stream passato come parametro, io sinceramente in questi casi non l'ho mai usato.
In teoria potresti volerlo aggiungere quando stai lavorando con file, quindi prima di chiuderli puoi richiamare la funzione col puntatore al file aperto come parametro, ma anche in quel caso, sinceramente basta fclose per evitare problemi.
Fra l'altro avevo letto tempo fa proprio sull'argomento che fflush non è pensato per essere usato con l'stdin come buffer di destinazione.

Quello che stai dicendo te mi è tornato utile una volta, ma in una situazione diversa: non stavo prendendo stringhe come parametri, ma richiedevo un tasto premuto come input ogni tot tempo, e volevo assicurarmi di leggere ogni volta l'ultimo tasto premuto nell'intervallo trascorso. Ma anche in quel caso, non ho usato fflush proprio per quel motivo, basta fare un ciclo e scartare i caratteri presenti nel buffer finché non ne resta uno solo :)
 
Se ti riferisci solo alle matrici, il tuo codice non aveva un problema, era solo scomodo da usare, perché per ogni contatto avresti dovuto accedere a 2 matrici insieme, e meno efficiente, perché avresti inizializzato tutto all'avvio del programma. Le strutture collegate lineari in C sono l'equivalente delle liste che trovi nei linguaggi orientati agli oggetti, e di solito sono preferibili nei casi, come questo, in cui devi gestire un vettore di dati che sia di lunghezza variabile. Questo ripeto, sempre se vuoi evitare di preallocare tutto già in partenza.
Per il resto il mio appunto era su questo, ma sul tuo codice il problema che ti dava era risolvibile, se volessi per forza mantenere l'uso delle matrici potresti farlo :)

Sergio :)

In che modo potevo risolverlo?Puoi spiegarmi come potevo modificare il mio codice, affinchè non mi dava quel problema? ç_ç
 
In che modo potevo risolverlo?Puoi spiegarmi come potevo modificare il mio codice, affinchè non mi dava quel problema? ç_ç

L'errore era che usavi fgets, che non c'entra niente, quello di solito lo usi per leggere una stringa da un puntatore di tipo FILE*, passargli in ingresso il buffer stdin è una forzatura.
Se sostituisci quelle due righe con:

//fgets(nome, 40, stdin);
scanf("%s", nome);
//Altro codice in mezzo...
//fgets(numero, 20, stdin);
scanf("%s", numero);

Il resto funziona :)
 
Pubblicità
Pubblicità
Indietro
Top