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

Salve a tutti, il programma che segue se compilato con BC 5.02 sotto DOS
funziona benissimo, sotto linux (MDK 8.2) con GCC invece non funziona, o
meglio non mi legge l'ultima getchar, quella per prendere la risposta alla
domanda... Ho provato anche con scanf, ma se provo a leggere un char invece
di un int non funziona, se leggo un int il confronto con 's' o 'S' lo
salta... non capisco come mai...
posto il codice:
/*Stefano Fanari                                  matr 36233 Iglesias */
//Esercitazione n°2
//***Un sistema di numerazione ***
//Inclusione delle librerie
#include <stdio.h>
#define DIM 100
int numero_combinazioni(int base, int ndati);
void stampa_polinomo(int cifra, int base, const int ndati);
void main(void)
{
 int BASE, NDATI, errore=0;
 int numcomb, i;
 int risposta;
 do
   {
    if (errore)
       printf ("\n\a\t\t\til dato immesso non e' valido!!!\a\a");
    printf("\nInserisci la dimensione della base ( numero
positivo>0 ) -->");
    scanf("%d",&BASE);
    errore=-1;
   } while (BASE<=0);
   errore=0;
  do
   {
    if (errore)
       printf ("\n\a\t\t\til dato immesso non e' valido!!!\a\a");
    printf("\nInserisci il numero di cifre ( numero positivo>0 ) -->");
    scanf("%d",&NDATI);
    errore=-1;
   } while (NDATI<=0);
 /* il numero di combinazioni possibile è pari a BASE elevato NDATI */
 numcomb=numero_combinazioni(BASE,NDATI);
 printf ("\nil numero di combinazioni possibili e': %d;",numcomb);
 fflush(stdin);
  printf ("\nVuoi visualizzarle tutte? (s/n)");
  risposta=getchar(); //e' qui che non funziona!!!
  if ((risposta=='s')||(risposta=='S'))
     {
       for (i=0;i<numcomb;i++)
          {
           printf("\n");
           stampa_polinomo(i,BASE,NDATI);
          }
     }
}
int numero_combinazioni(int base, int ndati)
{
 if (ndati==1) return base;
 return (base*numero_combinazioni(base,ndati-1));
}
void stampa_polinomo(int cifra, int base, const int ndati)
 {
  int vettore[DIM];
  int dividendo, conta;
  //Inizializzo tutto il vettore a 0
  for (conta=0;conta<ndati;conta++)
      vettore[conta]=0;
  conta=0;
  dividendo=cifra/base;
  vettore[conta]=(cifra%base);
  while (dividendo>0)
       {
        conta++;
        vettore[conta]=(dividendo%base);
        dividendo=dividendo/base;
       }
  //Stampo il vettore
  for (conta=ndati-1;conta>=0;conta--)
     printf (" %d ",vettore[conta]);
 }
Grazie a quanti avranno tempo da dedicarmi
Stefano

 fflush(stdin);
Il problema e' qui.
Fflush da standard e' definita solo per stream di output; per stream
di input e' undefined behaviour: chi implementa la funzione puo' fare
come gli pare.
Sotto dos e solaris hanno scelto di farla funzionare comunque, sotto
linux no... la scelta e' legittima in entrambi i casi.
Sostituisci con
while (getchar() != '\n')
che e' un metodo portabile.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."


Grazie perfetto!!!
Dove posso trovare una buona guida sul C "standard"?
Ciao.
Stefano

Dove posso trovare una buona guida sul C "standard"?
compra il libro K&R
ps. se n'è parlato in centinaia di post
--
Lawrence Oluyede
rhy...@myself.com