elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  matriz de caracteres
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: matriz de caracteres  (Leído 2,004 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
matriz de caracteres
« en: 5 Julio 2013, 01:37 am »

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

Código
  1. nt main()
  2. {
  3.    int i,j,n,m;
  4.    char matriz[MAX][MAX];
  5.    printf("Dame el numero de filas: ");
  6.    scanf("%d",&n);
  7.    printf("Dame el numero de columnas: ");
  8.    scanf("%d",&m);
  9.    for(i=0;i < n;i++)
  10.    {
  11.        for(j=0;j < m;j++)
  12.        {
  13.            printf("Dame el elemento (%d,%d):\n",i,j);
  14.            scanf("%c",&matriz[i][j]);
  15.        }
  16.    }
  17.    return 0;
  18. }

de antemano gracias


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: matriz de caracteres
« Respuesta #1 en: 5 Julio 2013, 02:20 am »

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


En línea

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


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: matriz de caracteres
« Respuesta #2 en: 5 Julio 2013, 08:12 am »

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
En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: matriz de caracteres
« Respuesta #3 en: 7 Julio 2013, 01:50 am »

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?

Código
  1. int main()
  2. {
  3.    int i,j,n,m;
  4.    char matriz[MAX][MAX];
  5.    printf("Dame el numero de filas: ");
  6.    scanf("%d",&n);
  7.    printf("Dame el numero de columnas: ");
  8.    scanf("%d",&m);
  9.    for(i=0;i < n;i++)
  10.    {
  11.        for(j=0;j < m;j++)
  12.        {
  13.            printf("Dame el elemento (%d,%d):\n",i,j);
  14.            scanf("%s",&matriz[i][j]);
  15.            if(matriz[i][j] < 48 ||matriz[i][j] > 57 )
  16.            {
  17.                printf("Error!!Solo puede ingresar numeros\n");
  18.                j--;
  19.            }
  20.        }
  21.    }
  22.    return 0;
  23. }
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: matriz de caracteres
« Respuesta #4 en: 7 Julio 2013, 04:58 am »

El problema se debe a que estas utilizando:
Código
  1. 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
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines