Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - David8

#11
Programación C/C++ / A que equivale...
8 Mayo 2014, 21:35 PM
Al igual que en un puntero a puntero para acceder a casa uno de los elementos se puede usar:
nombre[x][y]
Tanto como
*(*(nombre + y) + x)

Si tengo por ejemplo un puntero a una estructura  tal que
struct estructura *nombre;
nombre = malloc(n * sizeof(*nombre));

Y un miembro de esa estructura es por ejemplo
char **cadena;

Para acceder a un elemento j de ese miembro en una estructura i uso
(jugador + i) -> cadena[j];

Mi pregunta es, ¿Cómo represento lo anterior como notación completa de punteros? Es decir sin usar los corchetes que uso en cadena[j] como en
*(*(nombre + y) + x)

Un saludo
#12
Cita de: eferion en  6 Mayo 2014, 11:54 AM
puts( nombres[0][0] ) debería funcionarte

Da el siguiente error:
Citar
invalid conversion from 'char' to 'const char*' [-fpermissive]

Un saludo
#13
Muchas gracias. La cosa es que lo había probado antes pero use la función puts() en vez de printf("%c", ...) y me daba error como es lógico.

Un saludo
#14
Por ejemplo si tengo:

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
char **nombre;
nombre = (char **)malloc(10 * sizeof(char *));
nombre[0] = (char *)malloc(10 * sizeof(char));
gets(nombre[0]);   // ya se que no se debe usar

return EXIT_SUCCESS;
}

Pongamos ahora que introduzco por teclado "HOLA", ¿cómo hago para acceder por ejemplo a la 'H' o a cualquier otro caracter de nombre[0]

Un saludo
#15
Cita de: rir3760 en  2 Mayo 2014, 23:12 PM
Falta entre otras cosas las directivas de inclusión y la declaración de la variable "Jugador", por favor publica el código fuente completo.

Un saludo

Ya lo solucioné. Es que tenía un for que en un caso particular del índice cambiaba su valor a 0 y esto hacía un bucle infinito.

Muchas gracias por la ayuda, un saludo.

#16
Cita de: Blaster en  4 Mayo 2014, 21:25 PM
Yo te recomendaria que busques otro IDE mas moderno, por que este tiene el compilador y las librerias desactualizadas, tienes alternativas como el Code::Blocks que te recomiendo muchisimo

Saludos

El problema es que tengo Windows 8.1 con procesador de 64 y no compila, por eso me decanté por el Dev C++

Un saludo
#17
Cita de: Blaster en  4 Mayo 2014, 21:13 PM
Esta muy raro eso, el compilador te deberia lanzar un error diciendo que la función no se ha definido. Podrias decir que compilador usas

Uso el Dev C++. El error que me salía, por lo que no ejecutaba era el de linked error.

Como no me dió error en la función no me fije si estaba bien esa parte de la sintaxis.
Un saludo.
#18
Cita de: Blaster en  4 Mayo 2014, 20:58 PM
Esta linea

Código (cpp) [Seleccionar]
*(posicion + i)--;

La debes cambiar por esta

Código (cpp) [Seleccionar]
(*(posicion + i))--;

Debes conocer la prioridad que tienen los diferentes operadores



Si eso ya lo probé y es verdad que lo tenía mal. Pero además, he estado ahora mirando y es que llamo a la funcion como
funcion(situarPosiciones);

Y funcion no la tengo declarada. No sé porqué el compilador no me avisó de eso.

Un saludo y muchas gracias
#19
Este es el código:

#include<stdio.h>

void situarPosiciones(int *posicion);

int main(void)
{

static int situarPosiciones[5] = {0,1,2,3,4};


funcion(situarPosiciones);


return 0;
}

void situarPosiciones(int *posicion)
{
int i;

for(i = 0; i < 5; i++){
if(*(posicion + i) != 0){
*(posicion + i)--;
}
else{
*(posicion + i) = 4;
}
}

return;
}


Lo que pretende es que cada vez que llame a la función me salga algo como:
|0|1|2|3|4| 1º llamada
|4|0|1|2|3| 2º llamada
|3|4|0|1|2| 3º llamada
--------------------------

Pero no sé que puede estar fallando

Un saludo
#20
Cita de: rir3760 en 30 Abril 2014, 17:52 PM
Porque cuando declaras una variable fuera de toda función (en tu caso "Jugador") y quieres darle un valor inicial este debe ser uno constante como 123 o "alguna cadena" (no puedes utilizar llamadas a función).

Un saludo

Esta duda la tengo porque estoy haciendo un programa que simule el juego del poker.
Y relacionado con esto tengo lo siguiente:


typedef char* String;

struct jugador{
String nombreJugador;
int nFichas;  
int posicion;  
String *cara;
String *palo;
};

// código

int main(void)
{
// código
Jugador = malloc(5 * sizeof(*Jugador));
//código
reservaMemoriaManos();
//código

return EXIT_SUCCESS;
}

void reservaMemoriaManos()
{
int i, j;

for(i = 0; i<5; i++){
(Jugador + i) -> cara = (char **)malloc(2 * sizeof(char *));
(Jugador + i) -> palo = (char **)malloc(2 * sizeof(char *));

for(j = 0; j<2; j++){
(Jugador + i) -> cara[j] = (char *)malloc(7 * sizeof(char));
(Jugador + i) -> palo[j] = (char *)malloc(10 * sizeof(char));
}
}

return;
}


Y en esta última función me parece que falla el programa. Pero no sé que es.
Lo que intento hacer es que cada uno de los 5 jugadores declarados con

Jugador = malloc(5 * sizeof(*Jugador));
tengan 2 cartas, por los que deberán tener 2 palos y 2 figuras.

Lo escribo aquí para no abrir un nuevo tema, ya que está relacionado con lo anterior.

Un saludo