[C] Rubrica telefonica

Sergio94

Utente Èlite
3,970
354
CPU
AMD Ryzen 7 2700X
Dissipatore
CORSAIR H115i Pro
Scheda Madre
ASUS X470-F
HDD
CORSAIR MP510 480GB | SAMSUNG 860 EVO 1TB | WD Red 2TB
RAM
CORSAIR Vengeance RGB 16GB (2x8) DDR4 3466 C16 @ 3200 C16
GPU
Gigabyte GTX1080 WF2 + Gigabyte GTX 1050Ti WF2
Audio
Integrata: Supreme FX
Monitor
SAMSUNG 28UE590 28" 4K 1ms
PSU
CORSAIR RM750X
Case
CORSAIR Obsidian 450D
Periferiche
Razer BlackWidow | Logitech Master MX2
OS
Windows 10 Pro
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 :)
 
  • Mi piace
Reazioni: Prt

Awenega_

Utente Attivo
198
26
CPU
Intel Core i5-4670k
Scheda Madre
Msi z97 Gaming 5
HDD
WD 1tb Blue
RAM
Corsair Vengeance 2x4gb
GPU
Msi Gtx 760 2GB
PSU
Corsair CX600M
Case
Bitfenix Shinobi Core
OS
Windows 8.1
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? ç_ç
 

Sergio94

Utente Èlite
3,970
354
CPU
AMD Ryzen 7 2700X
Dissipatore
CORSAIR H115i Pro
Scheda Madre
ASUS X470-F
HDD
CORSAIR MP510 480GB | SAMSUNG 860 EVO 1TB | WD Red 2TB
RAM
CORSAIR Vengeance RGB 16GB (2x8) DDR4 3466 C16 @ 3200 C16
GPU
Gigabyte GTX1080 WF2 + Gigabyte GTX 1050Ti WF2
Audio
Integrata: Supreme FX
Monitor
SAMSUNG 28UE590 28" 4K 1ms
PSU
CORSAIR RM750X
Case
CORSAIR Obsidian 450D
Periferiche
Razer BlackWidow | Logitech Master MX2
OS
Windows 10 Pro
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 :)
 
  • Mi piace
Reazioni: Awenega_

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili