# Ansi C (Ayuda) cadena de caracteres Array bidimensional



## Not (Ene 28, 2011)

Buenas tardes, vuelvo a tener preguntas.
Ahora tengo que hacer otro programa similar al anterior, en ansi C.

Consiste en que se le introduce un máximo de 5 palabras, y después se muestran en pantalla.

El problema es que tengo que utilizar un array bidimensional, pero hay alguna funciones como gets y creo también que puts que no funcionan (no me deja compilar el programa).

si conoce alguien alguna función que sirva para esto me ayudaría mucho, he estado pensando alguna forma de hacerlo sin un array bidimensional, pero es complicado.

Gracias a todos

Un saludo.


----------



## gzaloprgm (Ene 28, 2011)

Para el compilador, un array bidimensional internamente es un puntero a la memoria (que es lineal y 1d)...

Tendrías que hacer algo como:

char palabras[5][MAXIMO_LARGO];

para usarlas deberías hacer palabras[0], palabras[1], ... palabras[4].

Un saludo,
Gonzalo


----------



## Unikfriend (Ene 28, 2011)

Hola Not,

Que compilador estas utilizando?
Cuando algunas instrucciones no funcionan normalmente es por que no se localiza la librerias.
Pon tu codigo aqui.

Slaudos.


----------



## gzaloprgm (Ene 28, 2011)

No creo que el OP esté programando para un microcontrolador (en otro post se ve que usa system("pause")), así que está casi descartado que sea un problema con las librerías...

Saludos


----------



## MVB (Ene 28, 2011)

```
#include <stdio.h>

int main(void){
    
    
    char Matrix[5][25];    
    
    gets(Matrix[0]);    
    puts(Matrix[0]);    
    
    return 0;
}
```

Como puedes ver, las cinco cadenas de texto se guardan en un array bidimensional, lo podes imaginar como una matriz de 5x25, cinco palabras con maximo 24 caracteres (hay que contar el nulo).
Cuando utiizo el operador [] sobre esta matriz, lo que hago es obtener una de las cinco cadenas de caracteres.

PD: Te invito a que consultes mas sobre la funcion gets y el peligro que implica usarla


saludos


----------



## Not (Ene 31, 2011)

Buenas a todos, el compilador que utilizo es el Dev++ (ansi C).
Bien el problema es que tengo que guardar la 5 palabras y mostrarlas todas de golpe (si no se introduce la palabra "fin" que saldria del programa).
Entonces estoy intentando un for para guardar las palabras en la posicion correspondiente, pero tengo algunos problemas que no entiendo, os dejo el código haber si vosotros encontrais algun fallo.
Los fallos estan entre //****//.

# include <stdio.h>
# include <stdlib.h>
int main ()
{
    char nombres [5] [21];
    char salida [5]="fin";
    int f, i;

    printf ("Introduce una o varias palabras");
    for (f=0;f<=5;f++);
    {
    gets (nombres [f]);
    i=strcmp(nombres[f],salida);         
    }
      if (i!=0);
       { 
    puts (nombres [f]);
       }
      else                       //syntax error before "else"//
       {
           return (0);

       }
    system ("pause");     //syntax error before string constant//
}

Los fallos que indico aqui, no los consigo resolver. Tambien no se si se puede usar el for, y la letra 'f' para recorrer el for y además usarlo para llenar la memoria correspondiente e ir mostrando.

Muchas gracias a todos, perdon por este jaleo.
Un saludo


----------



## Unikfriend (Ene 31, 2011)

HI NOT!

pues lo copie tal cual y el unico error que me marco fue en el 

if (i!=0);

por el punto y coma lo borre y me capturo una sola palabra;
ademas quita el punto y coma del for 

for (f=0;f<=5;f++);

y con esto debe funcionar...

saludos

//asi debe quedar
int main ()
{
char nombres [5] [21];
char salida [5]="fin";
int f, i;
 printf ("Introduce una o varias palabras\n");
 for (f=0;f<=5;f++)
 {
  gets (nombres [f]);
  i=strcmp(nombres[f],salida); 

  if (i!=0)
  { 
   puts (nombres [f]);
  }
  else 
  {
   return (0);
  }
 }

system ("pause"); 
}
//si el system ("pause"); 
//te causa error lopuedes cambiar por un getch();


----------



## Not (Ene 31, 2011)

Unikfriend gracias ya he hecho eso y algun fallo más, y asunto arreglado.
el código quedaria asi:

# include <stdio.h>
# include <stdlib.h>
int main ()
{
    char nombres [5] [21];
    char salida [5]="fin";
    int f=0, i;

    printf ("Introduce una o varias palabras:\n");
    for (f=0;f<=4;f++)
    {
    gets (nombres [f]);
    i=strcmp(nombres[f],salida);

      if (i>0)
        {

    puts (nombres [f]);


        }

      else

           return (0);

     }   
       system ("pause");

}


Muchas gracias a todos.
Un saludo


----------



## Unikfriend (Ene 31, 2011)

Oki doki....


----------



## Berto75 (Ago 14, 2016)

Vale por lo que veo en mi caso si es:

int1 activa[3][3];

if(activa[es][Y]){ }//Y es indiferente si activa[es]....no es true

solo tengo que poner:

if(activa[es]){  }//para preguntar por el 1º

Pero que ocurre ahora si yo quiero solo preguntar por el 2º??

if(activa[X][es]){ }//X es indiferente si activa[][es]....no es true

Hay alguna forma de que solo tenga en cuenta el 2º??
sin tener que meterlo en un 'for' o algo a si


----------



## TRILO-BYTE (Ago 14, 2016)

no se la mejor manera de recorrer una matriz bidimencional es hacer un ciclo ya sea for , while o do while
 no queda de otra que ir preguntando mientras se hace el recorrido de la matriz


----------



## Berto75 (Ago 15, 2016)

De ser a si me quedaría con el for, los while son de cuidado Excepto el principal que contiene el programa prefiero evitarlos en lo posible.


----------



## TRILO-BYTE (Ago 16, 2016)

pues un ciclo while es bueno por que lo puedes condicionar.


----------



## Dr. Zoidberg (Ago 16, 2016)

AlberertO dijo:


> De ser a si me quedaría con el for, los while son de cuidado Excepto el principal que contiene el programa prefiero evitarlos en lo posible.


Los "while" no tienen NADA de malo... excepto no saber usarlos.
De hecho, en C, los ciclos "for" son ciclos while disfrazados, por eso es que el for es una estructura tan poderosa y expresiva.

Toca tomar los libros...


----------

