Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/05/2013, 13:00
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 2 meses
Puntos: 83
Respuesta: pueden ayudarme a validar esta matriz ?

Hay algunos trucos para hacerlo con scanf pero esa funcion no fue diseñada para este tipo de comprovaciones; basandote en la forma de trabajar de scanf puedes tunear un poco el ingreso de datos:

Código:
int x;

printf("Entra un entero: ");
while(scanf("%d", &x) != 1) {
    //limpias stdin, despues te comento como no usar fflush(stdin)
    printf("No valido, entra un entero: ");
}
El scanf retorna el nº de elementos cargados del tipo indicado, es decir que si pides un entero y entras una letra resulta que lee 0 elementos y retorna 0; en este caso pido un entero y solo funcionará cuando retorne que ha leido un elemento de tipo entero ok?

La otra forma las controlada es usar fgets para leer en forma de texto y convertir a entero con strtol, tambien tienes que tunear el codigo un poco; un ejemplo:

Código:
long int x;
char strnum[10], *pch;

printf("Entra entero: ");
if(fgets(strnum, sizeof(strnum), stdin) != NULL) {
	pch = NULL;
	x = strtol(strnum, &pch, 10);
	
	if(pch[0] == 10) {
		printf("%d ok", x);
	}
	else {
		printf("error");
	}
}
Tal vez visto asi sea mas practico usar el primer ejemplo, pero te lo puedes poner en una funcion aparte y usar el bucle para llamarla.

Otra cosa, no uses stdin con fflush porque esa funcion no sirve para el stream de entrada; en cambio debes usar algo que vaya leyendo del stdin hasta vaciarlo, puedes usar esta funcion como propia (puedes encontrarla por ahi bajo mil nombres diferentes):

Código:
void fflush_stdin() {
	while (getchar() != '\n');
}

//en el codigo
scanf("%d", &x);
fflush_stdin();
Y la libreria conio no es estandar. Aun otra cosa, lo de 'int true;' es valido? Creo que deberias dejarlo como macro para que funcione correctamente, o como enum:

Código:
#define FALSE 0
#define TRUE 1

enum L_BOOLEAN_VALUES {false, true};
Saludos
vosk