Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    99

    [C] printf() non stampa

    Ciao a tutti, sono un principiante e ho un problema con questo codice preso dal libro su cui sto studiando il c. Questo programma dovrebbe visualizzare la quantità di caratteri inseriti ma la funzione printf() non stampa niente. Potrei usare scanf() ma mi chiedo perchè con getchar() non funzioni, mettendo printf() nel corpo del ciclo for funziona stampando però la quantità dei caratteri immessi ad esempio così:
    ciao
    0
    1
    2
    3
    4

    Quindi perchè non funziona il codice allegato?
    Grazie

    codice:
    #include <stdio.h>
    
    
    main()
    {
        double nc;
        for (nc = 0; getchar() != EOF; ++nc)
            ;
        printf("%.0f\n", nc);
        
    }
    Ultima modifica di drinu; 17-09-2023 a 19:58

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,448
    Ma che ci fa quella riga col ; dopo la linea della for?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    99
    Ti riporto le stesse parole del libro:

    "Il corpo del ciclo for è vuoto, perchè tutto il lavoro è fatto dalla valutazione e dall'esecuzione dell'incremento.
    Le regole grammaticali del c però richiedono che l'istruzione for abbia un corpo: il punto e virgola isolato, detto istruzione nulla (null statement), serve a tenere fede a questa regola. Lo abbiamo disposto su una riga a sé per renderlo visibile."

    Il libro è : Il linguaggio C. Principi di programmazione e manuale di riferimento. Brian W.Kernighan, Dennis M.Ritchie. Pearson. seconda edizione

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,297
    Bene. E' scritto tutto nel testo che hai riportato: "tutto il lavoro è fatto dalla valutazione e dall'esecuzione dell'incremento". Tutto il lavoro del ciclo for viene fatto lì.
    Tutto quello che viene DOPO il ciclo for, verrà eseguito AL TERMINE del ciclo for.
    Quindi la tua printf() verrà eseguita al termine del ciclo for.
    Quando termina il ciclo for?
    O, detto in altre parole, come fai a far terminare quel ciclo for?
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    99
    Allora io pensavo che EOF (end of file) fosse il tasto invio, invece ho trovato in rete che EOF equivale alla pressione di ctrl-d (interruzione del flusso in ingresso).
    Premuto ctrl-d si che allora la funzione printf() fa il suo lavoro indicandomi il numero dei caratteri, anche se invio bisogna premerlo lo stesso dopo la parola che inserisco facendo contare un carattere in più, poco male!
    Grazie LeleFT per avermi posto quella domanda...
    Ora posso continuare col libro, grazie comunque a tutti!

  6. #6
    @drinu, giusto una curiosità: se sai che è Return che termina il tuo input, perché controlli EOF?
    ARTRIPE

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,448
    Quote Originariamente inviata da drinu Visualizza il messaggio
    Ti riporto le stesse parole del libro:
    Grazie per il ripassino ... ma quello che ti volevo dire è proprio che con quel ; (corpo vuoto del for) il ciclo deve terminare prima che passi alla printf ... non hai colto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    99
    Quote Originariamente inviata da optime Visualizza il messaggio
    @drinu, giusto una curiosità: se sai che è Return che termina il tuo input, perché controlli EOF?
    Non so! Mi sa che gli autori del mio libro hanno usato EOF per usarlo pin avanti con la lettura dei file di testo. Comunque se volessi controllare Return al posto di EOF come devo fare? Devo sostituire EOF con '13' della tabella ASCII ma ho già visto che non funziona. ...mi fate un esempio?
    Ultima modifica di drinu; 19-09-2023 a 17:51

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,448
    [Guarda che il Return è il 13
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    credo 13 da solo, non '13' tra apici
    ARTRIPE

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