Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] - problemi scanf e (f)gets

    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).

    codice:
    	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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    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?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    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?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    Dopo la scanf

    while (getchar() != '\n') ;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    Dopo la scanf

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

    while( isspace( getchar() )
    ;

    Giusto??

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    No ... cosa c'entra?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon
    No ... cosa c'entra?
    Non devo "eliminare" tutti i caratteri spazio? O mi basta gestire il carattere newline?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    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.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da oregon
    Chi ha mai parlato di spazi?

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

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    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.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.