Loop validazione stretta input

di il
5 risposte

Loop validazione stretta input

Ciao a tutti, in questa parte di codice dove si devono semplicemente riempire degli array, ci sono problemi con la validazione stretta, nel senso che se dentro un insieme inserisco una lettera(dovrebbe accettare solo numeri reali) mi va in loop e non capisco perchè:

	insieme_t ins1, 		  /* variabili per rappresentare i due insiemi */
		      ins2;
	int i,                    /*variabile per un ciclo for*/
		ins,
		j;                  /*variabile per esito prima funzione*/
	double esito_lettura;     /*variabile per la validazione stretta*/

	do                                                                                       /*validazione stertta e acquisizione del */
	{                                                                                        /*numero di elementi del primo insieme   */
	 	printf("Digitare il numero di elementi del primo insieme (>0) e premere invio:");
		esito_lettura=scanf("%d",
			  &ins1.dim);
		if (ins1.dim <= 0)
		{
			printf("Input non accettabile!\n");
		    while (getchar() != '\n');
		}
	}
	while (ins1.dim <= 0||esito_lettura!=1);

	ins1.arr = (double *) calloc( ins1.dim, sizeof(double));              /* allocazione di memoria in base al n° di elementi*/

	for (ins1.ind = 0; (ins1.ind) < (ins1.dim); ins1.ind ++)            /* ciclo for per inserire gli elementi  */
	{                                                                                /* del primo insieme nell'array        */
		do
		{
			printf("Digitare l'elemento numero %d del primo insieme:",
				   ins1.ind+1);
			esito_lettura=scanf ("%lf",
				   &ins1.arr[ins1.ind]);
				   j=0;
			for( i = 0; i < ins1.ind; i++)
			{
				if(ins1.arr[ins1.ind] == ins1.arr[i]||esito_lettura!=1)
				{
					printf("Input non accettabile\n");
		            while (getchar() != '\n');
		            j=1;
		        }
			}
		}
        while (j==1||esito_lettura!=1);
	}

	ins1.ind=0;

	do                                                                                       /*validazione stertta e acquisizione del */
	{                                                                                        /*numero di elementi del secondo insieme */
	 	printf("Digitare il numero di elementi del secondo insieme (>0) e premere invio:");
		esito_lettura=scanf("%d",
			  &ins2.dim);
		if (ins2.dim <= 0||esito_lettura!=1)
		{
			printf("Input non accettabile!\n");
		    while (getchar() != '\n');
		}
	}
	while (ins2.dim <= 0||esito_lettura!=1);

	ins2.arr = (double *) calloc( ins2.dim, sizeof(double));              /* allocazione di memoria in base al n° di elementi*/

	for (ins2.ind = 0; ( ins2.ind) < (ins2.dim); ins2.ind ++)            /* ciclo for per inserire gli elementi  */
	{                                                                                /* del secondo insieme nell'array       */
		do
		{
			printf("Digitare l'elemento numero %d del secondo insieme:",
				   ins2.ind+1);
			esito_lettura=scanf ("%lf",
				   &ins2.arr[ins2.ind]);
				   j=0;
			for( i = 0; i < ins2.ind; i++)
			{
				if(ins2.arr[ins2.ind] == ins2.arr[i])
				{
					printf("Input non accettabile \n");
		            while (getchar() != '\n');
		            j=1;
		        }
			}
		}
        while (j==1||esito_lettura!=1);
	}

Grazie in anticipo

5 Risposte

  • Re: Loop validazione stretta input

    Intanto deve essere

    int esito_lettura;

    dato che la scanf restituisce un intero.

    E il controllo deve essere fatto con la variabile esito_lettura ovvero

    if (esito_lettura != 1)
    { ...
  • Re: Loop validazione stretta input

    oregon ha scritto:


    Intanto deve essere

    int esito_lettura;

    dato che la scanf restituisce un intero.

    E il controllo deve essere fatto con la variabile esito_lettura ovvero

    if (esito_lettura != 1)
    { ...
    Il controllo dovrebbe esserci nel while ma vai in loop non so perchè...
  • Re: Loop validazione stretta input

    Hai fatto le modifiche che ti ho detto o no?
  • Re: Loop validazione stretta input

    oregon ha scritto:


    Hai fatto le modifiche che ti ho detto o no?
    Ho messo int ma va in loop ugualmente
  • Re: Loop validazione stretta input

    Hai messo la if come ti ho detto?
Devi accedere o registrarti per scrivere nel forum
5 risposte