Newsgroup: it.comp.lang.c
Titolo: perche' ultimo printf non dscrive?

#include<stdio.h>
#include<math.h>
 
main()
 
{
 
  int int1, int2;
  char carattere;
 
  printf("inserisci due numeri interi da confrontare: ");
  scanf("%d%d", &int1, &int2);
 
  if(int1==int2) printf("Sono uguali");
  if(int1>int2) printf("%d e' maggiore di %d", int1, int2);
  if(int1<int2) printf("%d e' minore di %d", int1, int2);
 
  printf("\nPremi un tasto per continuare\n");
  scanf("%c", &carattere);
  printf("%c", carattere);
 
  return 0;
 
}

 #include<math.h>
 
Per piacere spendi due righe per formulare la domanda nel corpo del 
messaggio.
L'ultima chiamata a printf() stampa il carattere nuova riga che è già 
nel buffer e il cui valore viene messo in c.
 
Prova con 
 
  printf("\nPremi un tasto per continuare\n");
  scanf("%c", &carattere);
  printf("1:%c\n", carattere);
  scanf("%c", &carattere);
  printf("2:%c:\n", carattere);
  scanf("%c", &carattere);
  printf("3:%c\n", carattere);
 
 
E al secondo numero intero digita "3a2!"

nel buffer e il cui valore viene messo in c.
 
grazie. Pero' vorrei capire
 
scanf("%c", &carattere);
 
non dovrebbe fermare il programma e attendere 
un input dalla tastiera?????
input che poi
 
printf("%c", carattere);
 
dovrebbe riportare???

 dovrebbe riportare???
 
Infatti succede proprio questo, ti stampa un carattere di nuova riga.

 dovrebbe riportare???
 
Esatto. Però sei davanti ad un altro caso: il tuo problema infatti non
è che non lo "riporta", ma che il sistema non te lo "visualizza". :-)
Per semplificare (in caso t'interessi ti conviene approfondire, visto
che è un argomento abbastanza importante) si potrebbe dire che
l'interfaccia da riga di comando (tty o simili) è impostata per
aggiornarsi ogni linea, non ogni carattere: questo comporta che finché
non stampi un ritorno a capo il tuo output non sarà visualizzato (per
completezza, ritorno a capo o una chiamata a fflush() che richiede
l'aggiornamento esplicito).
Ciao!

sistema lo deve riempire.
 
okay! Ma c'e' un modo per inizializzarlo vuoto .....
che so': 
 
carattere=nil

    printf("%c", carattere);
[...]
 
 
E' rimasto nello standard input '\n' (l'INVIO che batti dopo aver
inserito i due numeri), disponibile alla lettura successiva, quindi
arrivi alla:
 
     scanf("%c", &carattere);
 
che in realtà viene letto '\n' e il programma (naturalmente) termina.
Quindi la soluzione è semplice: leggere '\n' prima di arrivare alla
"scanf" finale. Lo puoi fare con "getchar()", e possiamo anche usarla
per leggere l'ultimo carattere che poi farà chiudere il programma:
 
#include <stdio.h>
 
int main(void)
{
     int int1, int2;
     int carattere = 0;
 
     printf("inserisci due numeri interi da confrontare: ");
     scanf("%d%d", &int1, &int2);
 
     if(int1 == int2) printf("sono uguali\n");
     if(int1 > int2) printf("%d e' maggiore di %d\n", int1, int2);
     if(int1 < int2) printf("%d e' minore di %d\n", int1, int2);
 
     carattere = getchar();
 
     if(carattere == EOF) return 1;
     printf("Premi un tasto per continuare\n");
     carattere = getchar();
 
     printf("primo carattere premuto: %c\n", carattere);
     return 0;
}
 
-- 
Vincenzo Mercuri | 
www.backbox.org