Saludos
estoy haciendo una simple matriz a la que le tengo que ingresar caracteres, pero que no me lee los datos y no entiendo por que
nt main()
{
int i,j,n,m;
char matriz[MAX][MAX];
printf("Dame el numero de filas: ");
scanf("%d",&n);
printf("Dame el numero de columnas: ");
scanf("%d",&m);
for(i=0;i < n;i++)
{
for(j=0;j < m;j++)
{
printf("Dame el elemento (%d,%d):\n",i,j);
scanf("%c",&matriz[i][j]);
}
}
return 0;
}
de antemano gracias
Cuando tengas un problema con un programa y este sea pequeño por favor publica este completo.
El porque el programa no realiza una pausa al pedir cada uno de los elementos se debe a que el especificador "%c" se traga el primer carácter que encuentre en el bufer de la entrada estándar y, en tu caso y en varias ocasiones, este es el avance de linea de (valga la redundancia) la linea anterior.
Para evitarlo basta con utilizar " %c" en la llamada a scanf. El espacio en " %c" es necesario para descartar cualquier carácter de espacio blanco (espacio, tabulador, avance de linea) que se encuentre en el mentado bufer.
Un saludo
o eso o aprende a limpiar el buffer de entrada antes de hacer una lectura...
Existen varias formas de limpiar el buffer de entrada... algunas gustan más, otras gustan menos y otras dan problemas en según que plataformas.
Si te interesa aprender a hacer esto, hay un tema en el foro que ya lo comenta:
http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)
muchas gracias por sus respuestas una ultima pregunta
ahora tengo una matriz que me tiene que ingresar solamente numeros, ya le puse la condicion para que en caso de ingresar una letra u otro caracter me marque un error pero por ejemplo si me pide ingresar un numero y yo le pongo 12b aunque tenga una letra si me lo toma por bueno y quiero evitarlo,como lo haria?
int main()
{
int i,j,n,m;
char matriz[MAX][MAX];
printf("Dame el numero de filas: ");
scanf("%d",&n);
printf("Dame el numero de columnas: ");
scanf("%d",&m);
for(i=0;i < n;i++)
{
for(j=0;j < m;j++)
{
printf("Dame el elemento (%d,%d):\n",i,j);
scanf("%s",&matriz[i][j]);
if(matriz[i][j] < 48 ||matriz[i][j] > 57 )
{
printf("Error!!Solo puede ingresar numeros\n");
j--;
}
}
}
return 0;
}
El problema se debe a que estas utilizando:
scanf("%s", &matriz[i][j]);
El especificador de formato "%s" es para leer una palabra, como ya te comente para leer un carácter en tu programa debes utilizar " %c".
Un saludo