Problema di buffer con stampa dei numeri primi o non

di Anonimizzato12308 il
7 risposte
#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

  • Vi prego di aiutarmi sarebbe urgente... Chiunque sia in grado potrebbe darmi una dritta ????????????
  • La variabile Primo deve essere sempre impostata a 0 all'inizio della funzione

    Primo=0;

    e non solo nel caso 2 o 3
  • Le variabili globali sono necessarie solo in pochi casi, in tutti gli altri rischiano solo di far danni. E questo è uno di quei casi
  • In realtà quel codice ha parecchi problemi (non ultima l'organizzazione dei vari blocchi ... a volte poco comprensibili) ma lo metterà a punto con un po' di pratica ...
  • Fare esperienza aiuta senz'altro
  • Ok grazie mille quindi metto le variabili nei prototipi
  • Le "variabili nei prototipi" ? E che vuol dire ?
Devi accedere o registrarti per scrivere nel forum
7 risposte