Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Asignar cadena de caracteres en un case. C

Estas en el tema de Asignar cadena de caracteres en un case. C en el foro de C/C++ en Foros del Web. Hola, ante todo gracias por prestar vuestro tiempo. Cuestión: Me encuentro programando un Blackjack en C, y me disponia a imprimir por pantalla el numero ...
  #1 (permalink)  
Antiguo 08/01/2012, 08:08
Avatar de aos_26  
Fecha de Ingreso: enero-2012
Ubicación: Vila-seca, Tarragona, España
Mensajes: 5
Antigüedad: 12 años, 3 meses
Puntos: 0
Asignar cadena de caracteres en un case. C

Hola, ante todo gracias por prestar vuestro tiempo.

Cuestión:
Me encuentro programando un Blackjack en C, y me disponia a imprimir por pantalla el numero de carta y el palo. El problema que tengo es que la unica forma de guardar una palabra como podria ser "picas" es creando diferentes vectores con una cadena de caracteres y usar un case para que depende del valor que reciba le asigne un vector o otro al printf.

No encuentro la forma de que en vez de escribir todo el rato printf en el case solo tenga que depende el valor recibido asignar una palabra a el vector.
Ejemplo de lo que estoy utilizando:
Código c:
Ver original
  1. int fr;
  2. char as[]="as", picas[]="picas", trevol[]="trevoles", corazon[]="corazones";
  3. srand(time(NULL));
  4. fr=rand()%4;
  5. switch (fr+1)
  6. {
  7.     case 1:
  8.         printf ("palo: %s", as);
  9.         break;
  10.     case 2:
  11.         printf ("palo: %s", picas);
  12.         break; 
  13.     case 3:
  14.         printf ("palo: %s", corazon);
  15.         break;
  16.     case 4:
  17.         printf ("palo: %s", trevol);
  18.         break;
  19. }
Una idea de lo que quiero hacer:
Código c:
Ver original
  1. int fr;
  2. char palo[];
  3. srand(time(NULL));
  4. fr=rand()%4;
  5. switch (fr+1)
  6. {
  7.     case 1:
  8.         palo[]="as"
  9.         break;
  10.     case 2:
  11.         palo[]="picas"
  12.         break; 
  13.     case 3:
  14.         palo[]="corazones"
  15.         break;
  16.     case 4:
  17.         palo[]="trevoles"
  18.         break;
  19. }
  20. printf ("el palo a sido: %s", palo);

Última edición por aos_26; 08/01/2012 a las 08:23 Razón: Titulo del mensaje.
  #2 (permalink)  
Antiguo 08/01/2012, 09:40
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: Asignar cadena de caracteres en un case. C

hola, no se C, se c++ (mas o menos :)), pero lo que veo es que tratas de asignarle a char palo[] una cadena de texto con el signo =, para hacer esto tenes que usar la funcion strcpy:

el switch cambiaria por el siguiente:

Código C:
Ver original
  1. switch (fr+1)
  2.     {
  3.     case 1:
  4.         strcpy(palo, "as");
  5.         break;
  6.     case 2:
  7.         strcpy(palo, "picas");
  8.         break;  
  9.     case 3:
  10.         strcpy(palo, "corazones");
  11.         break;
  12.     case 4:
  13.         strcpy(palo, "trevoles");
  14.         break;

otras cosas:

- Tenes que darle una dimension a char palo[], te recomiendo que le pongas 10 nomas, no necesitas mas.

- la condicion del switch puede ser solamente fr, no es necesario que le sumes 1, y si lo cambias, dentro del switch tenes que cambiar los case por un valor menor en 1 al que tiene. No es necesario que cambies esto, funciona igual.

Saludos y espero que te ande en C.
  #3 (permalink)  
Antiguo 08/01/2012, 11:18
Avatar de aos_26  
Fecha de Ingreso: enero-2012
Ubicación: Vila-seca, Tarragona, España
Mensajes: 5
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Asignar cadena de caracteres en un case. C

Cita:
Iniciado por starfix Ver Mensaje
hola, no se C, se c++ (mas o menos :)), pero lo que veo es que tratas de asignarle a char palo[] una cadena de texto con el signo =, para hacer esto tenes que usar la funcion strcpy:

el switch cambiaria por el siguiente:

Código C:
Ver original
  1. switch (fr+1)
  2.     {
  3.     case 1:
  4.         strcpy(palo, "as");
  5.         break;
  6.     case 2:
  7.         strcpy(palo, "picas");
  8.         break;  
  9.     case 3:
  10.         strcpy(palo, "corazones");
  11.         break;
  12.     case 4:
  13.         strcpy(palo, "trevoles");
  14.         break;

otras cosas:

- Tenes que darle una dimension a char palo[], te recomiendo que le pongas 10 nomas, no necesitas mas.

- la condicion del switch puede ser solamente fr, no es necesario que le sumes 1, y si lo cambias, dentro del switch tenes que cambiar los case por un valor menor en 1 al que tiene. No es necesario que cambies esto, funciona igual.

Saludos y espero que te ande en C.
Muchas gracias!!!

Funciona sin ningún tipo de problemas.

El fr+1 es simplemente por empezar desde 1 :)
  #4 (permalink)  
Antiguo 09/01/2012, 10:01
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: Asignar cadena de caracteres en un case. C

Otra cosa que podrías hacer y que no desperdicia memoria, es que "palo" fuera un puntero a char y cuando supieses el nombre que tienes que asignar ("as", "picas", "treboles" o "corazones"), solicitases memoria dinámicamente y empleases sólo la memoria realmente necesaria.

Puedes crear una función que solicite memoria, almacene el nombre en la memoria solicitada dinámicamente y te devuelva la dirección de dicha zona de memoria. Puedes usar constantes (#define) para identificar los palos y las cadenas de caracteres. Por ejemplo:

Código C:
Ver original
  1. #define AS "As"
  2. #define PICAS "Picas"

También, para no llenar de números el código, yo usaría la definición de constantes.

Código C:
Ver original
  1. #define VALOR_AS 0
  2. #define VALOR_ PICAS 1

Usando, por supuesto, los nombres y los valores que tu elijas y con los que te sientas más cómodo.

Por último, recordarte que si usas este método, para conocer los tamaños de las cadenas puedes usar la función strlen().

Un saludo,
gonzo.

Etiquetas: caracteres, programa, variables, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:36.