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

[Guida] Al C++ Parte 5.
(Questo messaggio è stato modificato l'ultima volta il: 26/07/2011, 0:08 da Luxor.)

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
Il prossimo programma serve a contare i caratteri di un testo, quindi cominciamo:

    C++ Programming
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. long nc;
  6.  
  7. nc = 0;
  8. while (getchar() != EOF)
  9. { /* Grazie Skyline */
  10. ++nc;
  11. printf("%1d\n", nc);
  12. }
  13. }



Abbiamo sempre usato int... e ora long? long indica che le variabili rappresentino un numero che misura almeno 32 bit, mentre int di 16 bit.

definiamo nc = 0;
Apriamo il nostro ciclo, while (getchar() != EOF quindi "quando"->(getchar() è diverso/non è uguale a EOF (fine del file)) "fai"->
{
++nc; (++ "aumenta di uno ilvalore dell'operando" come ++ puo anche esserci scritto --, e possono essere usati sia come prefissi (++nc) che come suffissi(nc++)

printf"scrivi"->("%1d\n", nc);
}

Quindi % si riferisce a nc, "scrivi qui" a distanza di 1 spazio (1d) \n newline

Finito, ora il programma conterà i caratteri scritti (divertitevi Asd)

Ora passiamo ad un altro modo per scrivere il programma un esempio simile alla costruzione del programma delle temperature.
Quindi:
    C++ Programming
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. double nc;
  6.  
  7. for (nc = 0; getchar() != EOF; ++nc)
  8. printf("%0.f\n", nc);
  9. }



double indica la possibilità che il numero della variabile contenga decimali, come float ma piu preciso.

for"per"->(nc = 0; getchar() != EOF; ++nc)

(non credo di dover spiegare e la stessa cosa di sopra Tounge)
printf"scrivi"->("%0.f\n", nc;

vi ricordo che .0f(o qualsiasi numero) indica un numero a virgola mobile con 0 caratteri dopo il punto decimale, se ci fosse stato 2 ci sarebbero 2 caratteri dopo il punto decimale... potete anche farlo cosi 8.5f visualizza come numero a virgola mobile, in un campo lungo almeno 8 caratteri e con 5 caratteri dopo il punto decimale

23/07/2011, 12:04
#1
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
bravo Luxor!
hai notato lo scherzo che fa?


digger
23/07/2011, 12:15
#2
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
ti riferisci alle { sul while Asd o che conta anche lo spazio dove stai per scrivere?

23/07/2011, 12:17
#3
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
mi riferisco al fatto che prima ti fa scrivere tutto e poi quando dai invio ti scrive tante volte quanti sono i caratteri il numero del conteggio... diciamo che leggendo il codice non è quello che uno si aspetta



digger
23/07/2011, 12:19
#4
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
Dovrebbe soltanto scrivere il numero?

23/07/2011, 12:28
#5
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
beh per come documentano la getchar in teoria dovrebbe leggere un carattere e dartelo
quindi in teoria dovrebbe funzionare che ogni volta che premi un tasto lui dovrebbe contarlo e scrivere a video il conteggio, almeno, questo è quello che ci si aspetta a "prima vista"
invece sai che fa sto pistola? il getchar non ti torna niente finchè non premi il tasto INVIO,
a quel punto ogni successiva chiamata di getchar altro non fa che andare a tirare fuori la lettera successiva che hai scritto da un qualche buffer di windows (stdin)
in poche parole funziona correttemente, ma fa tutto in una volta dopo che hai premuto INVIO Happywide



digger
23/07/2011, 12:35
#6
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 23/07/2011, 13:58 da Skyline@69.)

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
Si infatti già ieri sera ho dato un'occhiata a questo codice, e gli avevo fatto notare che per come lo aveva inteso non andava..
ps: i crediti per le graffe al while sono miei, non li hai messi?? Asd Asd

Forse ho capito quello che volevi fare, e la soluzione pare essere questa:
    C++ Programming
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <conio.h>
  4.  
  5. int main()
  6. {
  7. char c;
  8. long nc;
  9. nc = 0;
  10. while((c=getch()) != VK_RETURN)
  11. {
  12. nc++;
  13. printf("%c", c);
  14. }
  15. printf("\nHai inserito %d caratteri\n", nc);
  16. system("pause");
  17. }



Studiatelo un pò e vedi se riesci a estrapolarne il funzionamento, potresti implementarlo nei prossimi tuoi programmini...

23/07/2011, 13:56
#7
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
Sky hai centrato la questione, però vorrei che fosse chiaro che io non stavo dicendo che Luxor aveva sbagliato eh, il codice come lo ha scritto lui è giusto, è come lo riporta il libro, volevo solo far notare che la descrizione della funzione getchar fa pensare che legge un carattere e te lo restituisce invece non è cosi, o meglio non lo fa nel modo che uno si aspetta.
Comunque si, il codice che hai scritto tu invece fa proprio quello che ci si aspetta, anche se di fatto il risultato è lo stesso.
Con la differenza che con il tuo codice uno può elaborare i caratteri man mano che vengono introdotti e quindi magari eseguire del codice di conseguenza in "tempo reale" cosa che con il primo non è possibile
bravi bravi




digger
23/07/2011, 22:23
#8
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
-> ♥

23/07/2011, 22:27
#9
Cerca


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



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