Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

28/01/2011 #1


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.
28/01/2011 #2

Avatar de gzaloprgm

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
28/01/2011 #3

Avatar de Unikfriend

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.
28/01/2011 #4

Avatar de gzaloprgm

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
28/01/2011 #5


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
31/01/2011 #6


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
31/01/2011 #7

Avatar de Unikfriend

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();
31/01/2011 #8


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
31/01/2011 #9

Avatar de Unikfriend

Oki doki....
14/08/2016 #10


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
14/08/2016 #11

Avatar de TRILO-BYTE

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
15/08/2016 #12


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.
16/08/2016 #13

Avatar de TRILO-BYTE

pues un ciclo while es bueno por que lo puedes condicionar.
16/08/2016 #14

Avatar de Dr. Zoidberg

AlberertO dijo: Ver Mensaje
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...
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.