Ansi C (Ayuda) cadena de caracteres Array bidimensional

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.
 
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
 
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.
 
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
 
Código:
#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
 
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
 
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();
 
Última edición:
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
 
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
 
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
 
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...
 
Atrás
Arriba