Problema di buffer con stampa dei numeri primi o non

di il
7 risposte

Problema di buffer con stampa dei numeri primi o non

#include <stdio.h>
#include <stdlib.h>




 int i,n,Primo=0;

int Leggiintero(void)
{
    int x;
    int err;
    do{
            if((err=scanf("%d",&x))!=1);
                 while(getchar()!='\n');
    }while(err!=1);
    return x;
}

void Stampa_numero_primo (void)
    {
   do
   {
   printf("\nInserire un numero intero maggiore di 1\n");
   printf("***************************************\n");
   n=Leggiintero();
    }while(n==0||n==1);
   if (n==2||n==3) Primo=0;
      else if (n!=2||n!=3) for(i=2;i<=(n/2)+1;i++)  if((n%i)==0) Primo=1;
    if(Primo==0) printf(" \n %d E' primo\n",n);
     else printf("\n %d Non e' primo\n",n);
  return ;
}

void Stampa_divisori (void)
{
 do
 {
printf("\nInserire un numero intero maggiore di 1\n");
printf("***************************************\n");
    n=Leggiintero();
    printf("****************\n");
 }while(n==0||n==1);
    printf("I divisori sono:\n");
    for(i=2;i<=n;i++)
    if((n%i)==0) printf("\n%i\n",i);
  return;
}

void Menu (void)
{
    int scelta;
    printf("-------------------------------");
    printf("\n\nPROGRAMMA PER GRANDI MATEMATICI\n\n");
    printf("-------------------------------\n");
    printf("\t1. Stampa se numero primo o no\n\n");
    printf("\t*******************************\n");
    printf("\t\t2. Stampa divisori di numero\n\n");
    printf("\t\t*****************************\n");
    printf("\t\t\t0. Uscita\n\n");
    printf("\t\t\t**********\n\n");

    do
    {
        printf("--------------------------------------------------------------------------------\n");
        printf("Inserire scelta:\n");
        switch (scelta=Leggiintero())
        {
            case 0: break;
            case 1: Stampa_numero_primo ();
            break;
            case 2: Stampa_divisori ();
            break;
            default: printf("\nInserire una scelta valida\n");


        }
}while (scelta!=0);
return;
}

int main()
{
Menu();

return 0;
}
Il problema è il seguente: la stampa dei numeri primi funziona fino a quando non inserisco un numero non primo, questo fà si che poi anche i numeri primi me li stampi come non primi.
Tipo se scelgo 1 nel menu( quindi stampa se numero primo o no), poi inserisco un 11, che è primo,
funziona. Poi però inserisco ancora una volta sempre scegliendo nel menu 1, il numero 8 ad esempio e mi dice che non è primo e anche questo è giusto. Ora se però la terza volta inserisco di nuovo 11, che prima mi diceva di essere primo, questa volta me lo dà come non primo.
Cosa dovrei fare per ovviare al problema????

7 Risposte

Devi accedere o registrarti per scrivere nel forum
7 risposte