|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jan 2009
Messaggi: 25
|
[C] programma conteggio caratteri -non quadra-
Questo codice preso dal Kernighan doverbbe, secondo l'autore:
1) contare i caratteri digitati; 2) terminare il programma una volta finiti i caratteri immessi. #include <stdio.h> /*conta i caratteri*/ main() { int nc; nc=0; while (getchar()!=EOF) ++nc; printf("%3d\n", nc); } Ma il risultato è questo: MacBook-carlo ![]() kkkk 1 2 3 4 5 dove kkkk è la mia digitazione e i numeri sono il conteggio. Come si può notare i caratteri sono 4, e il conteggio ne rivela 5. Poco male, si potrebbe impostare il contatore a -1. Ma il problema è che dopo il quarto carattere getchar legge il carattere EOF (cioè la stringa è finita), ma invece di terminare ciclo e programma, come dichiarato dall'autore: 1) esegue ancora una volta il corpo del ciclo; 2) si posiziona ancora su getchar in attesa di nuovo input. Infatti potete vedere che non è ricomparsa la riga di comando del terminale e dopo il 5 posso già digitare la nuova seq di carattere poichè il programma è ancora in funzione (cioè non è terminato). Come faccio a realizzare un vero programma di conteggio caratteri che mi stampi solo il numero finale di caratteri e che termini il programma definitivamente? Grazie a tutti! Ciao! k. Ultima modifica di karlettinos : 04-08-2009 alle 10:31. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Mi sa che lì ricevi anche il '\n' dell'invio: controlla che il carattere non sia '\n' prima di incrementare e stampare il numero di caratteri, così alla pressione di Ctrl + D (o Ctrl + Z, a seconda del tuo sistema operativo) il programma si chiuderà con il giusto numero di caratteri.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#3 | |
Junior Member
Iscritto dal: Jan 2009
Messaggi: 25
|
Quote:
Nel codice ho sositutito EOF con \n: #include <stdio.h> /*conta i caratteri*/ main() { int nc; nc=0; while (getchar()!='\n') ++nc; printf("%3d\n", nc); } e ora funziona perfettamente! Mi sorge allora un dubbio: è meglio che butto il testo nel cestino???! ![]() |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 579
|
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Be', molti considerano il K&R la "bibbia" del C, ma credo che sia più o meno vecchio quanto il linguaggio che tratta. Personalmente non saprei, ho sempre studiato i vari linguaggi senza libri, ma ho visto che all'università consigliano il Deitel, da un veloce sguardo mi sembra che tratti bene gli argomenti e che proponga esercizi "stuzzicanti".
![]() ciao ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Il C e' un linguaggio molto succinto, quindi il K&R va piu' che bene.
E molto conciso, ha degli esempi non banali ed e' un libro che si legge tranquillamente. 240 pagine di C distillato. ![]() Le uniche cose che non tratta sono le aggiunte al C99, ma per questo bastano 10 pagine scarse e la documentazione si trova dappertutto.
__________________
MICROSOFT : Violating your privacy is our priority |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
|
Il libro diciamo che a parte certi errori (che ho trovato pure io) mi sembra ben fatto e spieghi passo passo la programmazione in C.
__________________
------------------------------------------------------------------------------------------------------------ Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3 IPHONE 3GS 16GB BLACK MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD ------------------------------------------------------------------------------------------------------------ |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Il libro probabilmente come caratteri intende i char in generale e \n è effettivamente un char: quando hai digitato kkkk e poi invio non hai digitato solo kkkk ma anche invio, quindi è giusto che sia contato.
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:43.