Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C] Getchar e EOF

  1. #1

    [C] Getchar e EOF

    Ciao,
    una piccola banalità ma non riesco a venirne a capo, cosa non va in questo codice?

    codice:
    while((carattere = getchar()) != EOF) 
    		text[cntText++] = carattere;
    il mio intento era quello di continuare a leggere dei caratteri fino all'inserimento dell'EOF.

  2. #2
    e come lo inseriresti l'EOF da tastiera?

  3. #3
    ctrl+z

  4. #4
    il problema principale è che non effettui un controllo sul numero di caratteri inseriti e salvi anche l'EOF nella stringa (non so se ti serve o meno).
    per il resto mi sembra tutto ok.

  5. #5
    Va bene per il controllo sul numero di caratteri letti da tastiera, ma per quale motivo dici che salvo l'EOF nella stringa ?
    Una volta che carattere è uguale ad EOF il controllo non dovrebbe fallire e il ciclo while terminare?

  6. #6
    Suppongo che carattere sia dichiarato come char, e non come int.
    getchar restituisce un int e non un char per avere a disposizione dei valori non validi per il char da riservare per l'EOF. Ora, quando tu assegni il suo valore restituito ad un char, con il cast implicito rendi irriconoscibile l'EOF, per cui effettuare il controllo dopo l'assegnazione non ha più senso.
    Per risolvere, dichiara carattere come int.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Sebbene all'inizio carattere fosse dichiarato di tipo char avevo già provveduto a sostituirla con una variabile di tipo int, purtroppo il risultato non cambia, il controllo fallisce e la getchar continua ad aspettarsi altri caratteri da leggere.

  8. #8
    Di nuovo qui!

    Ho ripreso in mano il programma e mi sono accorto di una cosa, il primo EOF viene ignorato, continuando però a digitare caratteri un secondo EOF viene correttamente riconosciuto e il while termina.

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