Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C][linux] Annullare ogni carattere premuto, prima di una scanf

    Ciao a tutti!

    ho un problema con la scanf, faccio un piccolo esempio per mostrarlo:

    codice:
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int main() {
    	int i, n;
    
    	for (i=0; i<20; i++) {
    		printf("#\n");
    		usleep(200000);
    	}
    
    	printf("inserisci n=");
    	scanf("%d", &n);
    	printf("n=%d\n", n);
    	return 0;
    }
    Questo programma stampa una serie di # per circa 5 secondi, poi chiede un numero in input e poi lo stampa.

    Il problema è che, per esempio, se durante la stampa dei # io premo '4', quando mi chiederà il numero aggiungerà anche il 4 nella scanf, conseguentemente se inserisco 3 e faccio invio il numero che stamperà non sarà 3 ma 4.

    Mi servirebbe qualcosa che cancelli qualsiasi carattere immesso prima di una scanf, come si può fare?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scrivi

    fflush(stdin);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Scrivi

    fflush(stdin);
    codice:
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int main() {
    	int i, n;
    
    	for (i=0; i<20; i++) {
    		printf("#\n");
    		usleep(200000);
    	}
    
    	printf("inserisci n=");
    	fflush(stdin);
    	scanf("%d", &n);
    	printf("n=%d\n", n);
    	return 0;
    }
    non funziona!
    non cambia nulla

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se il tuo compilatore supporta la getch includi

    #include <conio.h>

    e prima della scanf

    while(!getch());
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    Se il tuo compilatore supporta la getch includi

    #include <conio.h>

    e prima della scanf

    while(!getch());
    no, in lunix la conio non c'è!

    possibile che non si può risolvere il problema?

  6. #6
    up

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Premesso che a me, su xp, non da nessun problema questo programma (a parte la unistd.h che ho tolto) puoi provare con fpurge(stdin), definita in stdio.h

  8. #8
    Io non vedo il problema, è comune che quanto scritto durante l'esecuzione non venga cancellato ma direttamente letto alla prima lettura di standardinput.
    Personalmente lo trovo molto comodo, mi permette di scrivere comandi prima che mi vengano chiesti. Risparmio tempo ^^
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

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 © 2025 vBulletin Solutions, Inc. All rights reserved.