Verificare-validare
Functia scanf() creaza probleme daca ea asteapta sa primeasca un intreg iar utilizatorul introduce un sir de caractere. Acest lucru se poate evita prin citirea tuturor datelor ca siruri de caractere si apoi sa le convertim la tipul de date corect.

#include <stdio.h>
#include <ctype.h>
#define MAXBUFFERSIZE   80

void clearline( void )
{
	char c;

	c = getchar();
	while( c != '\n' )
		c = getchar();
}

main()
{
	char    c;
	char    buf[MAXBUFFERSIZE];
	int     nr;
	int     flag = 0;
	int     valid;

	while( flag  == 0 ) {
		printf(" Introduceti sirul (<80 chars)\n");
		c = getchar();
		nr = 0;
		while( (c != '\n')  &&  (nr < MAXBUFFERSIZE)) {
			buf[nr++] = c;
			c = getchar();
		}
		buf[nr] = '\0';
		printf("\nLinia introdusa a fost :\n");
		printf("%s\n", buf);

		valid = 0;
		while( valid == 0 ) {
			printf("Continuati (Y/N)?\n");
			scanf(" %c", &c );
			c = toupper( c );
			if ((c == 'Y') || (c == 'N') )
				valid = 1;
			else
				printf("\007Erroare: Alegere gresita!\n");
			clearline();
		}
		if (c == 'N') flag = 1;
	}
}

Un alt exemplu se refera la citirea unui numar ca un sir.


#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define MAXBUFFERSIZE   80

main()
{
	char    c;
	char    buf[MAXBUFFERSIZE];
	int     nr;
	int     flag = 0, number, valid;

	while( flag  == 0 ) {
		valid = 0;
		while( valid == 0 ) {
			printf("Introduceti un numar intre 1si 1000\n");
			c = getchar();
			nr = 0;
			while( (c != '\n')  &&  (nr < MAXBUFFERSIZE)) {
				buf[nr++] = c;
				c = getchar();
			}
			buffer[nr] = '\0';
			number = atoi( buffer );
			if ( (number < 1) || (number > 1000) )
				printf("Eroare. Numarul nu este in intervalul 1-1000\n");
			else
				valid = 1;
		}
		printf("\nNumarul introdus :%d\n",number);
	}

}



Citeva reguli de baza:

#include <stdio.h>
#include <ctype.h>

main()
{
	int  valid;
	char c;

	valid = 0;
	while( valid == 0 ) {
		printf("Continuati (Y/N)?\n");
		scanf(" %c", &c );
		c = toupper( c );
		if ((c == 'Y') || (c == 'N') )  valid = 1;
		else  printf("Eroare!\n");
	}
}

Previous | Next | Home |