matriz de caracteres

Iniciado por m@o_614, 5 Julio 2013, 01:37 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

eferion

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

m@o_614

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;
}

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language