Newsgroup: it.comp.lang.c
Titolo: perchè sotto linux non funziona?

Salve, ho fatto questo semplice programmino in C, compilato sotto win con
DEVC++ funziona come voglio, sotto linux invece la coppia di funzioni
fflush() e getchar() non funziona come mi aspetterei e cioè il programma non
si ferma in attesa che io prema un tasto.
perché?
Allego, per chi è così gentile da darmi una spiegazione il sorgente
/*calcola lo scorporo IVA */
#include<stdio.h>
#include<math.h>
#include<ctype.h>
int main (void);
float aprx (float x);
int main (void)
{
 float compenso, cassa, imponibile, iva, importo, ritenuta;
 int i;
 printf ("programma per lo scorporo dell'IVA \n");
 printf ("rilasciato sotto licenza GPL \n");
 printf ("inserisci l'importo complessivo in euro ");
 scanf ("%f", &importo);
 importo = aprx (importo);
 imponibile = aprx (importo / 1.2);
 compenso = aprx (imponibile / 1.02);
 printf ("\n \n compenso   = %10.2f", compenso);
 cassa = aprx (compenso * 0.02);
 printf ("\n \n cassa      = %10.2f", cassa);
 imponibile = compenso + cassa;
 printf ("\n \n imponibile = %10.2f", imponibile);
 iva = aprx (imponibile * 0.2);
 printf ("\n \n iva        = %10.2f", iva);
 importo = imponibile + iva;
 printf ("\n \n importo    = %10.2f", importo);
 ritenuta = aprx (compenso * 0.2);
 printf ("\n \n ritenuta   = %10.2f", ritenuta);
 printf ("\n \n resta      = %10.2f \n", importo - ritenuta);
 printf ("\n \n premi invio [return] per uscire \n");
 fflush (stdin);
 i = getchar ();
 return (0);
}
float aprx (float x)
{
 float y;
 y = floor (x * 100 + 0.5) / 100;
 return y;
}
Accetto anche critiche (non importa se feroci :-D) su come ho implementato
il problema in C :-)
Saluti a tutti
--
Angelo M. Figundio
figun...@tiscali.it
www.figundio.com
***********************************************
E il mio signore lo sa
una sola volta non basterà
che l'avvoltoio divori il mio corpo
per far tacere per sempre il mio cuore
(A. Branduardi)
*******************************************

  fflush (stdin);
potrebbe non servire a niente
-- 
A. Top posters
Q. What's the most annoying thing on Usenet?

 potrebbe non servire a niente
fflush è una funzione che *deve* prendere un file aperto in output. stdin è 
ovviamente aperto in input, quindi fflush(stdin) è undefined behaviour, 
ovvero comportamento indefinito. Su win, in particolare, fflush(stdin) fa 
quello che uno si aspetta, ovvero salta tutti gli spazi e sincronizza il 
buffer. Sotto linux è ignorata (almeno, sotto il mio computer, potrebbe 
anche far esplodere il pc :-)). Per ottenere un effetto simile puoi usare, 
in modo portatile:
while (getchar() != '\n')
        ;
che per rendere più chiaro puoi definire come macro di nome, ad esempio, 
sincronizza. Es:
#define sincronizza while(getchar() != '\n)
/* ... */
sincronizza;
Scritta così la devi usare senza parentesi, il che a prima vista ti fa 
capire che c'è qualcosa di strano e difficilmente è una funzione.
-- 
Andrea Bergia - studente          Linux Registred User #281550
Per favore non mandatemi allegati in Word o PowerPoint.
Si veda 
http://www.fsf.org/philosophy/no-word-attachments.html

 ha scritto nel messaggio
news:6fq58-...@host.andreabergia.torino.it...


 Grazie ancora!!
Sullo standard del "C", ovviamente (non disponibile in rete ma ordinabile
anche in formato elettronico alla ISO 
www.iso.org
 ). In mancanza dello
standard, il K&R seconda edizione. :-)
In ogni caso se vuoi sapere come si comportano le funzioni sotto il S.O.
su cui sviluppi, e' bene rifarsi alla documentazione della della libreria
"C" che si usa.
Nel caso di Linux
http://www.gnu.org/manual/glibc-2.2.5
http://www.gnu.org/manual/glibc-2.2.3
dipende da cosa utilizzi.
C:\>iao Angelo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it