Newsgroup: it.comp.lang.c
Titolo: I/O su console

Rieccomi con nuove domandine stupide:
1)ho notato che ogni istruzione che stampa sullo schermo il contenuto di una
var, ha bisogno di saperne il valore prima di essere eseguita: ad esempio
printf("Immetti: %c\n",getch()); è interpretata come a=getch();
printf....etc.... con printf() posso risolvere un problema con un printf con
il messaggio, il get..., e poi la stampa su schermo.
Se invece faccio:
putchar(getche());
putchar(getche());
viene interpretato come:
a=getche();
b=getche();
putchar(a);putchar(b);
per cui, immettendo ad esempio le lettere 'a' e 'b' di seguito non ottengo
il raddoppiamento delle lettere(aabb), ma abab.
Come potrei fare per raddoppiarle?
2)perché succede ciò(in Basic e Pascal non era così.....)
3)perché scrivendo:
a=getch();
putchar(a);
b=getch();
putchar(b);
il prog mi fa inserire prima i due valori e poi li visualizza di seguito,
mentre sostituendo a putchar() printf() non succede? c'è una alternativa a
puchar()?
4)per quale necessità getchar() restituisce un int(intendo nel prototipo),
se comunque usa solo il byte di ordine inferiore(mi sa proprio che dalla
tastiera non posso immettere un valore maggiore di 255...)? L'int serve
forse per poter anche restituire EOF(-1) in caso di errore?
e quale potrebbe essere l'errore?
5)quale potrebbe essere l'errore di putchar(), dato che facendo ad esempio
putchar(2,5) il numero viene troncato e putchar stampa l'ASCII 2? anche qui,
perché restituisce int?
e ora un OT:
6) da quanto ho capito, i valori ASCII da 0 a 127 sono standard, mentre gli
altri variano da OS a OS, vero? per questo con la posta elettronica, usando
il formato standard a 7 bit non ci sono problemi, vero?
Grazie.
--
Marco Iannaccone
ICQ: 18748121
IRC: Tolkien
e-mail: 
captai...@ussvoyager.com

 il formato standard a 7 bit non ci sono problemi, vero?
Esatto.
EMG

you wrote :
#1)ho notato che ogni istruzione che stampa sullo schermo il contenuto di una
#var, ha bisogno di saperne il valore prima di essere eseguita: ad esempio
#printf("Immetti: %c\n",getch()); è interpretata come a=getch();
#printf....etc.... con printf() posso risolvere un problema con un printf con
#il messaggio, il get..., e poi la stampa su schermo.
#Se invece faccio:
#putchar(getche());
#putchar(getche());
#
#viene interpretato come:
#a=getche();
#b=getche();
#putchar(a);putchar(b);
No, ti sbagli.
Cominciamo col dire che getche() e' una funzione non standard e quindi
non dovrebbe essere riportata negli esempi, ma considerando che il
comportamento delle chiamate di funzioni in C e' lo stesso, si puo'
affermare che la sequenza 
putchar(getche())
putchar(getche()) 
viene interpretata come :
a = getche() ;
putchar(a) ;
b = getche() ;
putchar(b) ;
Il fatto che i caratteri non compaiano subito a video e' dovuto alla
"bufferizzazione" che viene compiuta sullo stream di output.
Prova a scrivere :
#include <stdio.h>
...
putchar(getche()); fflush(stdout) ;
putchar(getche()); fflush(stdout) ;
#per cui, immettendo ad esempio le lettere 'a' e 'b' di seguito non ottengo
#il raddoppiamento delle lettere(aabb), ma abab.
#Come potrei fare per raddoppiarle?
#
#2)perché succede ciò(in Basic e Pascal non era così.....)
#
#3)perché scrivendo:
#a=getch();
#putchar(a);
#b=getch();
#putchar(b);
#il prog mi fa inserire prima i due valori e poi li visualizza di seguito,
#mentre sostituendo a putchar() printf() non succede? c'è una alternativa a
#puchar()?
#
#4)per quale necessità getchar() restituisce un int(intendo nel prototipo),
#se comunque usa solo il byte di ordine inferiore(mi sa proprio che dalla
#tastiera non posso immettere un valore maggiore di 255...)? L'int serve
#forse per poter anche restituire EOF(-1) in caso di errore?
#e quale potrebbe essere l'errore?
#
#5)quale potrebbe essere l'errore di putchar(), dato che facendo ad esempio
#putchar(2,5) il numero viene troncato e putchar stampa l'ASCII 2? anche qui,
#perché restituisce int?
#
#e ora un OT:
#6) da quanto ho capito, i valori ASCII da 0 a 127 sono standard, mentre gli
#altri variano da OS a OS, vero? per questo con la posta elettronica, usando
#il formato standard a 7 bit non ci sono problemi, vero?
#
#Grazie.
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------

 due.
Si, intendevo scrivere 2.5.
Viene semplicemente troncato, e non viene segnalato eof.
Comunque grazie!


 Viene semplicemente troncato, e non viene segnalato eof.
Un buon compilatore avrebbe dovuto emettere almeno un warning. Comunque
è normale che non venga segnalato EOF. Quel valore viene restituito solo
se c'è un errore in scrittura e non se il parametro passato non è un
int.
EMG