Loop validazione stretta input

di Anonimizzato25412 il
5 risposte
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

  • 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)
    { ...
  • 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è...
  • Hai fatto le modifiche che ti ho detto o no?
  • oregon ha scritto:


    Hai fatto le modifiche che ti ho detto o no?
    Ho messo int ma va in loop ugualmente
  • Hai messo la if come ti ho detto?
Devi accedere o registrarti per scrivere nel forum
5 risposte