Benvenuto! Per postare e godere delle funzionalità del forum registrati, occorrono pochi secondi ed è gratis!

[Guida] Al C++ Parte 4.
(Questo messaggio è stato modificato l'ultima volta il: 22/07/2011, 19:25 da Luxor.)

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
Passiamo ora a considerare una famiglia di programmi dedicati all'elaborazione di dati di tipo carattere, la libreria standard fornisce diverse funzioni per leggere o scrivere un carattere alla volta: getchar e putchar sono le piu semplici.

    C++ Programming
  1. a = getchar()



getchar legge il prossimo carattere in ingresso e ne restituisce il valore

    C++ Programming
  1. putchar(a)



putchar visualizza un carattere per ogni chaiamata

Iniziamo per capire meglio:

    C++ Programming
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int a;
  6.  
  7. a = getchar();
  8.  
  9. while (a != EOF)
  10. {
  11. putchar(a);
  12. a = getchar();
  13. }
  14. }



Quindi definiamo la variabile a (potete usare a come potete usare c,b, ecc...)

Poi iniziamo il nostro ciclo, while"quando"->(a != EOF)
EOF? EOF sta per End of file"Fine del file"
Quindi quando a "è diverso"/"non è uguale a" EOF
putchar(a); appunto "scrivi" l'argomento che in questo caso è a
infine a = getchar(); definiamo a, cosi da scrivere solo il prossimo valore.

P.S sinceramente non capisco perche il libro dica di definire a = getchar(); due volte... funziona benissimo anche facendolo una sola volta, ma speriamo un aiuto da parte di Digger o Skyline.. vabbè, sorvoliamo.

Ora vediamo un altro metodo piu corto e semplice di fare lo stesso programma:

    C++ Programming
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int a;
  6.  
  7. while ((a = getchar()) != EOF)
  8. putchar(a);
  9. }



a differenza di prima mettiamo tutto dentro while, cosa che risulta molto piu facile da capire, quindi quando a = getchar() è diverso dalla fine del file allora scrivi a (getchar e putchar "leggono" e "scrivono" nella maggior parte delle volte cosa noi scriviamo tramite tastiera, quindi all'interno del programma scrivete qualcosa e premete invio, cosi capirete Asd)

Una cosa da notare è che != (diverso,non uguale a) ha la precedena su = (uguale) è per questo che mettiamo le parentesi nel secondo programma

Un altra cosa.. Upside_downP) al posto di putchar si puo anche mettere printf.




22/07/2011, 19:18
#1
Cerca

Iscritto
Messaggi: 2,216
Discussioni: 102
Registrato: 03-2011
Mix: 0
good +1

22/07/2011, 19:46
#2
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
    C++ Programming
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int a;
  6.  
  7. a = getchar();
  8.  
  9. while (a != EOF)
  10. {
  11. putchar(a);
  12. a = getchar();
  13. }
  14. }




P.S sinceramente non capisco perche il libro dica di definire a = getchar(); due volte... funziona benissimo anche facendolo una sola volta, ma speriamo un aiuto da parte di Digger o Skyline.. vabbè, sorvoliamo.
[/quote]
semplice, il programma così configurato prosegue nel seguente modo:
"int a;" -> dichiara la variabile a, quindi viene riservato spazio in ram per quella variabile;
"a = getchar();" -> aspetta che l'utente prema un tasto e assegna il valore del tasto ad 'a';
il ciclo controlla che non sia "return", cioè invio o in breve EOF e lo stampa a video, e dopo dinuovo aspetta che premi un tasto, riassegna ad a il nuovo valore e torna a controlloare se è EOF:
se non lo è, ristampa a video il valore e aspetta un nuovo tasto premuto;
se lo è se finisce il cicle e salta a dopo la parentesi graffa di chiusura, ma non essendoci nessun'altra istruizione il programma termina e si chiude.
Se lo metti una sola volta funziona ma solo se lasci quello fuori dal ciclo, cioè il primo, altrimenti il compilatore ti darà un errore perchè nel ciclo controlli il valore di a, valore che non ha, perchè non glielo hai mai assegnato.
Invece nell'ultimo esempio che hai fatto funzione perchè l'assegnazione avviene durante il ciclo, e questo prima di controllare a le assegna il valore Smile
Mi merito un +1? Asd

22/07/2011, 20:31
#3
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
Provando a levare il primo e poi il secondo (a = getchar()) il risultato è che levando il primo (quello fuori ciclo) seppur appena aperto il programma segna un errore "debug error...." il programma funziona, mentre se levo quello nel ciclo e lascio quello fuori funziona, ma ripete il ciclo senza invio.. quindi continua a riscrivere a da solo all'infinito, dai si.. il +1 ci sta Happywide

22/07/2011, 20:40
#4
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
(22/07/2011, 20:40)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Provando a levare il primo e poi il secondo (a = getchar()) il risultato è che levando il primo (quello fuori ciclo) seppur appena aperto il programma segna un errore "debug error...." il programma funziona, mentre se levo quello nel ciclo e lascio quello fuori funziona, ma ripete il ciclo senza invio.. quindi continua a riscrivere a da solo all'infinito, dai si.. il +1 ci sta Happywide

Stai compilando nella configurazione debug giusto? Perchè se è release ti darebbe un altro errore...comunque è questo a cui mi riferivo..
Per quanto riguarda il ciclo che va avanti all'infinito dovresti arrivarci...se all'inizio ad a assegni un valore che non è OEF, il ciclo continua a leggere quel valore di a e sarà sempre lo stesso quindi niente OEF e andrà avanti all'infinito Smile
Thx ♥

22/07/2011, 21:06
#5
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
Sisi, quello si.. non capivo l'utilità di scriverlo due volte.. grazie Happywide

22/07/2011, 21:22
#6
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 22/07/2011, 21:26 da Skyline@69.)

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
(22/07/2011, 21:22)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Sisi, quello si.. non capivo l'utilità di scriverlo due volte.. grazie Happywide

Quando vuoi Smile

ps nella tua prossima guida, invece del getch() finale puoi proporre
    C++ Programming
  1. system("pause");


contenuto in "windows.h"
non so se lo conosci o comunque se non lo conosci provandolo capirai il perchè Smile

22/07/2011, 21:23
#7
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
Ah.. grazie.. direi che è decisamente meglio Blush

22/07/2011, 21:32
#8
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
(22/07/2011, 21:32)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Ah.. grazie.. direi che è decisamente meglio Blush

Beh guarda che in c++ ce ne sono molti di accorgimenti da poter utilizzare, specialmente in queste piccole applicazioni...
Mi verranno in mente man mano che leggerò i tuoi post e te le sottoporrò Smile
Non studio mica programmazione (quindi non solo c++, ma anche altri linguaggi, sia client-side che server-side) da anni e da autodidatta per niente Blush

22/07/2011, 21:48
#9
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
ma che teneri che siete Blush


digger
22/07/2011, 23:27
#10
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 22/07/2011, 23:29 da Luxor.)

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
(22/07/2011, 23:27)digger Ha scritto:

[Per vedere i link devi REGISTRARTI.]

ma che teneri che siete Blush

U Jelly?

22/07/2011, 23:28
#11
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
(22/07/2011, 23:28)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

(22/07/2011, 23:27)digger Ha scritto:

[Per vedere i link devi REGISTRARTI.]

ma che teneri che siete Blush

U Jelly?

U Jelly=?

22/07/2011, 23:30
#12
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
uh? o.o


digger
22/07/2011, 23:31
#13
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
hahaha! si dice cosi nei giochi.. sarebbe "sei geloso?"

22/07/2011, 23:32
#14
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
no direi di no, però è simpatico vedervi discutere di programmazione Tounge


digger
22/07/2011, 23:35
#15
Cerca


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  [Guida] Al C++ Parte 8. Luxor 12 1,320 28/07/2011, 14:42
Ultimo messaggio: digger
  [Guida] Al C++ Parte 7. Luxor 5 844 27/07/2011, 14:51
Ultimo messaggio: digger
  [Guida] Al C++ Parte 1. Luxor 7 1,346 25/07/2011, 23:38
Ultimo messaggio: digger



Utenti che stanno guardando questa discussione: 1 Ospite(i)