Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: 7hongo7 en 29 Marzo 2013, 22:36 pm



Título: Problema con impresión en pantalla
Publicado por: 7hongo7 en 29 Marzo 2013, 22:36 pm
Hola a todos de nuevo yo aquí pidiéndoles su ayuda, bueno tengo que hacer un programa que lea una matriz de caracteres y la imprima en pantalla pero el problema es que me pide los caracteres de la matriz bien pero a la hora de imprimir en pantalla solamente me imprime la ultima linea, mi codigo es este:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100

int main()
{
   int n,i,j,aux;
   char a[MAX];
   char d[MAX];
   char b[MAX][MAX];
   printf("Introduce\t");
   scanf("%d",&n);        //Pide el tamaño de la matriz
   for(i=0;i<n;i++){
      scanf("%c",&a);    //Pide los caracteres del renglón
      for(j=0;j<n;j++){
         scanf("%c",&d[j]);   //Pide los caracteres de la fila
      }
   }
   for(i=0;i<n;i++){
      putchar(a);
      for(j=0;j<n;j++){
         putchar(d[j]);
      }
   }
   printf("\n");
   return 0;
}

Los datos de entrada son introducido por el usuario pero deben de ser en forma de matriz osea:
4
@@@@
-@--
--@@
----

ó

3
aaa
bbb
fff

Bueno el punto es que cuando tiene que imprimir solamente me imprime la ultima linea osea:
en el primer ejemplo imprime solamente:
----
----
----
----
en el segundo ejemplo imprime solamente:
fff
fff
fff

Por favor ayúdenme es de vida o muerte bueno no pero si es importante!!!


Título: Re: Problema con impresión en pantalla
Publicado por: durasno en 30 Marzo 2013, 00:32 am
Hola! para que declaras la matriz "b" si no lo usas????
Si vas a ingresar caracteres en los arreglos "a" y "d", los for anidados no hacen falta en cambio para el ingreso en la matriz si tenes que usarlo. La forma de hacerlo seria:
Código
  1.   for(i=0;i<n;i++){
  2.      for(j=0;j<n;j++){
  3.         scanf("%c",&b[i][j]);
  4.      }
  5.   }
Ahora bien, ingresar caracteres trae un problema que son los "caracteres no deseados" que queda en el bufer del teclado, como el ENTER '\n'... Para limpiar el bufer tenes que agregar este bucle:
Código
  1. while(getchar()!='\n'); /* limpia bufer de teclado */
Finalmente el codigo quedaria(incluido el bucle):
Código
  1. int main()
  2. {
  3.   int n,i,j,aux;
  4.   //char a[MAX];
  5.   //char d[MAX];
  6.   char b[MAX][MAX];
  7.   printf("Introduce\t");
  8.   scanf("%d",&n);
  9.  
  10.  
  11.   for(i=0;i<n;i++){
  12.      while(getchar()!='\n');
  13.      for(j=0;j<n;j++){
  14.         scanf("%c",&b[i][j]);
  15.      }
  16.   }
  17.   printf("\n");
  18.   for(i=0;i<n;i++){
  19.      for(j=0;j<n;j++){
  20.         putchar(b[i][j]);
  21.      }
  22.    printf("\n");  
  23.   }
  24.   return 0;
  25. }

Espero se haya entendido algo. Saludos