Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problema con Matriz en C.

Estas en el tema de Problema con Matriz en C. en el foro de C/C++ en Foros del Web. Bueno pues estoy tratando de hacer un programa para construir autómatas a través de una tabla de transición, estoy tratando de guardar los valores de ...
  #1 (permalink)  
Antiguo 27/09/2013, 23:32
 
Fecha de Ingreso: septiembre-2013
Mensajes: 2
Antigüedad: 11 años, 1 mes
Puntos: 0
Problema con Matriz en C.

Bueno pues estoy tratando de hacer un programa para construir autómatas a través de una tabla de transición, estoy tratando de guardar los valores de la tabla de transición en una matriz, me mire varios tutoriales en Internet para hacer matrices y no encuentro el error, lo que pasa es que cuando compilo el código y ejecuto el programa al pedirme los valores este se salta espacios de la matriz, osea, en lugar de pedirme 6 valores(para una matriz 3x2 por ejemplo) se salta 2 espacios de la matriz, luego 3 y asi, les dejo el código para ver si me pueden ayudar, de antemano, gracias.

Código C:
Ver original
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <string>
  5. #include <stdlib.h>
  6. #include <conio.h>
  7.  
  8. main (){
  9.      
  10.     int filas, columnas, nfil, ncol;
  11.     char simbolos[100][100];
  12.     printf("Este programa sirve para construir un automata finito determinista a traves de su tabla de transicion y validar sus expresiones \n");
  13.     printf("\n Dime la cantidad de filas que contiene tu tabla de transicion \n");
  14.     scanf("%d", &nfil);
  15.     printf("\n Dime la cantidad de columnas que contiene tu tabla de transicion \n");
  16.     scanf("%d", &ncol);
  17.                 for(filas=0; filas<nfil; filas++){
  18.                              for(columnas=0; columnas<ncol; columnas++){
  19.                                              printf("\n Dame el valor %d %d de tu matriz de transicion: ", filas, columnas);
  20.                                              scanf("%c", &simbolos[filas][columnas]);
  21.                                              }
  22.                              }
  23.      
  24.     system("PAUSE");
  25.    
  26.    
  27.     }
  #2 (permalink)  
Antiguo 28/09/2013, 04:29
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: Problema con Matriz en C.

Limpia el bufer de entrada despues de pedir datos por teclado; por ahi encontrarás mil versiones de esta misma funcion

Código C:
Ver original
  1. void fflush_stdin() {
  2.     int c;
  3.     while ((c = getchar()) != EOF && c != '\n');
  4. }

El scanf lo que hace es escanear los datos de la lista de entradas por teclado hasta dar con un entero (en caso que el formato sea de entero) o un final de cadena (en caso que sea un formato de texto). En tu codigo escaneas un entero, la funcion 'lee' el entero y deja en primera posicion del bufer de entrada el \0 que se envia al pinchar el enter; luego escaneas otro entero: la funcion omite cualquier caracter hasta dar con enteros (omite el primer caracter del buffer de entrada que era el anterior \0 no leido) y dejando el resto que vuelve a ser un \0 enviado con el enter. Luego entras en el ciclo: el scanf esta formateado para texto, luego lee los caracteres del buffer de entrada hasta dar con un final de cadena \0 que es precisamente el primer caracter del buffer que quedo despues del ultimo escaneado de entero. El primer scanf de texto lee el \0, lo quita del bufer y sigue el ciclo: en la segunda vuelta el buffer no contiene nada porque en la primera vuelta se 'leyó' el \0 y se aceptaron los datos sin pinchar el enter. En la segunda vuelta el bufer esta vacio asi que espera a que pinches el enter para aceptar los datos y asi sucesivamente. No se si te habré liado con esta explicacion, por ahi puedes encontrar mas detalles acerca del escaneado de teclado y su comprtamiento.

Saludos
vosk
  #3 (permalink)  
Antiguo 28/09/2013, 12:51
 
Fecha de Ingreso: septiembre-2013
Mensajes: 2
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Problema con Matriz en C.

Cita:
Iniciado por vosk Ver Mensaje
Limpia el bufer de entrada despues de pedir datos por teclado; por ahi encontrarás mil versiones de esta misma funcion

Código C:
Ver original
  1. void fflush_stdin() {
  2.     int c;
  3.     while ((c = getchar()) != EOF && c != '\n');
  4. }

El scanf lo que hace es escanear los datos de la lista de entradas por teclado hasta dar con un entero (en caso que el formato sea de entero) o un final de cadena (en caso que sea un formato de texto). En tu codigo escaneas un entero, la funcion 'lee' el entero y deja en primera posicion del bufer de entrada el \0 que se envia al pinchar el enter; luego escaneas otro entero: la funcion omite cualquier caracter hasta dar con enteros (omite el primer caracter del buffer de entrada que era el anterior \0 no leido) y dejando el resto que vuelve a ser un \0 enviado con el enter. Luego entras en el ciclo: el scanf esta formateado para texto, luego lee los caracteres del buffer de entrada hasta dar con un final de cadena \0 que es precisamente el primer caracter del buffer que quedo despues del ultimo escaneado de entero. El primer scanf de texto lee el \0, lo quita del bufer y sigue el ciclo: en la segunda vuelta el buffer no contiene nada porque en la primera vuelta se 'leyó' el \0 y se aceptaron los datos sin pinchar el enter. En la segunda vuelta el bufer esta vacio asi que espera a que pinches el enter para aceptar los datos y asi sucesivamente. No se si te habré liado con esta explicacion, por ahi puedes encontrar mas detalles acerca del escaneado de teclado y su comprtamiento.

Saludos
vosk
Si entendi mas o menos, pero que quieres decir con "\0"? con eso quieres decir el simbolo que leyo el scanf?

otra, donde debo de colocar la funcion para limpiar el buffer? antes del for me supongo yo?
  #4 (permalink)  
Antiguo 28/09/2013, 13:22
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: Problema con Matriz en C.

"...pero que quieres decir con "\0"?..."

El \0 es el caracter que se envia a la cola del buffer de entrada cuando le das al enter pero que el scanf no elimina despues de leer el formato que le pides. El vaciado del stdin puedes ponerlo antes de escanear texto para asegurarte que la cola de caracteres esté vacía antes de que el usuario entre datos.


"...el simbolo que leyo el scanf?..."

El simbolo que no leyo el scanf; el scanf lee y saca de la cola los caracteres necesarios hasta dar con el formato que le indicas o hasta dar con un final de cadena \0.

Saludos
vosk
  #5 (permalink)  
Antiguo 04/10/2013, 01:05
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 13 años, 4 meses
Puntos: 6
Respuesta: Problema con Matriz en C.

hola si aun no resuelves el problema lo puedes hace con esto:

agrega la libreria stdio.h para incluir el printf y scanf
agrega despues de las librerias antes del main:

using namespace std;

y la linea 20 cambiala por esta

cin>>simbolos[filas][columnas];

Suerte y espero te sirva esto
  #6 (permalink)  
Antiguo 04/10/2013, 06:14
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 10 meses
Puntos: 46
Respuesta: Problema con Matriz en C.

Cita:
Iniciado por polpolpol Ver Mensaje
hola si aun no resuelves el problema lo puedes hace con esto:

agrega la libreria stdio.h para incluir el printf y scanf
agrega despues de las librerias antes del main:

using namespace std;

y la linea 20 cambiala por esta

cin>>simbolos[filas][columnas];

Suerte y espero te sirva esto
Esta programando en C, como dice el t'itulo, y para usar esas funciones tendr'ia que incluir iostrem, que viene a ser el stdio de C++.
  #7 (permalink)  
Antiguo 04/10/2013, 17:09
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 13 años, 4 meses
Puntos: 6
Respuesta: Problema con Matriz en C.

Cita:
Iniciado por L3m0n Ver Mensaje
Esta programando en C, como dice el t'itulo, y para usar esas funciones tendr'ia que incluir iostrem, que viene a ser el stdio de C++.
Hola:

no creo que sea un codigo hecho en c, si miras bien las librerias, ahi esta la libreria iostream!!

si es en c entonces ahi tendra varios errores

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <stdlib.h>
#include <conio.h>

ademas que le hace falta la librera stdio.h

Etiquetas: automatas, matriz, saltos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:51.