Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    In realtà per "mangiare" il whitespace (newline incluso) dovrebbe bastare
    codice:
    scanf("%d ", &N);
    (nota lo spazio dopo il %d)
    Amaro C++, il gusto pieno dell'undefined behavior.

  2. #2
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    In realtà per "mangiare" il whitespace (newline incluso) dovrebbe bastare
    codice:
    scanf("%d ", &N);
    (nota lo spazio dopo il %d)
    Buono a sapersi. Ignoravo completamente il significato dei whitespace al termine della stringa di formattazione della scanf.
    Ho sempre usato la direttiva di conversione %*c per mangiare la robaccia lasciata nell'stdin.
    Experience is what you get when you don’t get what you want

  3. #3
    Quote Originariamente inviata da Xaratroom Visualizza il messaggio
    Ho sempre usato la direttiva di conversione %*c per mangiare la robaccia lasciata nell'stdin.
    E avevi ragione, perché ricordavo male il whitespace a fine scanf non funziona, perché la scanf continua ad aspettare a ritornare finché riceve whitespace, per cui non ritorna finché non vengono inseriti caratteri non-whitespace. Chiedo scusa per la confusione.

    Rileggendo le manpage della scanf, comunque, salta fuori che il "pulire" lo stream di input dovrebbe servire solo se dopo fai a fare una scanf con %c o con %[...] (o fai un'operazione di input non formattato, come fgets o fread), visto che, con l'eccezione degli specificatori in questione, il whitespace rimasto viene automaticamente scartato prima di iniziare a fare il parsing di quanto specificato nella stringa di formato (è come se nella stringa di formato ci fosse sempre uno spazio iniziale).
    Amaro C++, il gusto pieno dell'undefined behavior.

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