PDA

Visualizza la versione completa : [C] - problemi scanf e (f)gets


tigerjack89
28-02-2012, 17:09
Ciao a tutti!!
Il mio problema, stavolta, è nel main. Dovrebbe visualizzare un menu che va a svolgere varie operazioni su un albero. Tutte le operazioni sembrano funzionare discretamente, a parte quella di inserimento; il problema sembra essere proprio nell'uso delle funzioni scanf e fgets (o gets indifferentemente).



while (1)
{
fputs("1. Inserisci elementi in sequenza: \n", OUTPUT);
fputs("2. Print tree: \n", OUTPUT);
//[...]
fputs("0. Exit: \n", OUTPUT);
scanf("%d", &choice);

switch(choice)
{
while ( gets(word))
{
// fprintf(OUTPUT, "\nElemento: ");
printf("string = %s\n", word); //Ho inserito due printf per controllare cosa stampava
value = atoi(word);
printf("value = %d\n", value);
tree = add(value, tree);
}
break;
}

In pratica, dalle printf di controllo, sembra venir fuori che quando scelgo l'opzione 1 e premo invio, il carattere INVIO viene memorizzato già nella stringa word; per questo, viene inserito il valore 0 nel nodo. Come mai? la gets non gestisce anche il carattere newline? Come si può ovviare al problema?

Grazie mille a tutti per l'aiuto :)

oregon
28-02-2012, 18:16
Pulisci il buffer in di input dopo la scanf ... mi pare che si sia detto qualche altra volta.

P.S. Ma come funziona quello switch?

tigerjack89
28-02-2012, 18:20
Originariamente inviato da oregon
Pulisci il buffer in di input dopo la scanf ... mi pare che si sia detto qualche altra volta.

P.S. Ma come funziona quello switch?
Ehm... mi sa che ho dimenticato di copiare la riga contenente case 1: :)
Ritornando al problema... come pulisco il buffer di input?

oregon
28-02-2012, 18:29
Dopo la scanf

while (getchar() != '\n') ;

tigerjack89
28-02-2012, 18:30
Originariamente inviato da oregon
Dopo la scanf

while (getchar() != '\n') ;
Capito!!
Oppure qualcosa tipo

while( isspace( getchar() )
;

Giusto??

oregon
28-02-2012, 18:32
No ... cosa c'entra?

tigerjack89
28-02-2012, 18:41
Originariamente inviato da oregon
No ... cosa c'entra?
Non devo "eliminare" tutti i caratteri spazio? O mi basta gestire il carattere newline?

oregon
28-02-2012, 20:08
Originariamente inviato da tigerjack89
Non devo "eliminare" tutti i caratteri spazio? O mi basta gestire il carattere newline?

Chi ha mai parlato di spazi?

Devi eliminare tutto fino al newline.

tigerjack89
28-02-2012, 20:09
Originariamente inviato da oregon
Chi ha mai parlato di spazi?

Devi eliminare tutto fino al newline.
chiaro. Per quale motivo però??

oregon
28-02-2012, 20:11
Se è chiaro come mai chiedi il motivo? :)

Comunque, lo scopo è eliminare tutto quello che rimane nel buffer a causa del fatto che la funzione scanf non estrae tutti i caratteri dallo stesso.

Loading