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

[SOLUCIONADO] Problema con variable char en proyecto c++

Estas en el tema de Problema con variable char en proyecto c++ en el foro de C/C++ en Foros del Web. Buenas, pues he hecho un ejercicio con c++, necesito meter en una variable char mas de un caracter, como u array en java vaya, pero ...
  #1 (permalink)  
Antiguo 02/02/2013, 06:20
Avatar de adrirs11  
Fecha de Ingreso: diciembre-2012
Ubicación: BCN
Mensajes: 107
Antigüedad: 11 años, 3 meses
Puntos: 1
Problema con variable char en proyecto c++

Buenas, pues he hecho un ejercicio con c++, necesito meter en una variable char mas de un caracter, como u array en java vaya, pero lo he probado con char*palo=... y con char palo[], y me da error y no me deja compilar. A ver si alguien me lo soluciona, gracias de antemano.

/* File: SieteYMedio.cpp
*Created on 31 de enero de 2013, 20:08
*/

#include <cstdlib>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <time.h>

using namespace std;

int main(int argc, char** argv) {

//Declaración de variables

int aleatorioNumero, aleatorioPalo;
float maximaPuntuacion, sumaJugador1, sumaJugador2;
bool respuesta;
char palo[], resp;

//Fivar

printf("Bienvenidos a SIETE Y MEDIO! Estas son las reglas del juego:\n"
"\n -El mazo de cartas sera similar a la baraja espanola, excluyendo los 8 y 9.\n"
"\n -Las cartas del 1 al 7 tienen su mismo valor en el juego.\n"
"\n -Las cartas jota(10), dama(11) y rey(12) tienen valor por medio, es decir, si tienes un siete y pides otra carta, y te sale cualquiera de estas tres, obtendras siete y medio, es la maxima puntuacion.\n"
"\n -Si te pasas de siete y medio, pierdes.\n"
"\n -Cuando quieras puedes plantarte.\n"
"\n -Puede haber empate.\n"
"\n\n\n COMIENZA EL JUEGO:\n");

srand(time(NULL));

aleatorioNumero=1+rand()%(10-1);
aleatorioPalo=1+rand()%(4-1);
sumaJugador1=0;
sumaJugador2=0;
sumaJugador1=0;
sumaJugador2=0;
respuesta=true;
maximaPuntuacion=7.5;

//Jugador 1, recibe la primera carta

switch (aleatorioPalo) {

case 1: palo="oros";
break;
case 2: palo="espadas";
break;
case 3: palo="copas";
break;
case 4: palo="palos";
break;

}


if (aleatorioNumero==8 || aleatorioNumero==9 || aleatorioNumero==10) {

sumaJugador1+=0.5;
}
else {

sumaJugador1+=aleatorioNumero;

}
printf("\nEsta es tu carta jugador 1: %i de %c. Tu puntuacion es de %f.\n", aleatorioNumero, palo, sumaJugador1);
printf("\nJugador 1, si quieres otra carta teclea 'y' si te plantas teclea 'n'.\n");
scanf("%c", &resp);

if (resp=='y') {

respuesta=true;
}
else {

respuesta=false;
}

//Jugador 2, recibe la segunda carta

aleatorioNumero=1+rand()%(11-1);
aleatorioPalo=1+rand()%(4-1);

switch (aleatorioPalo) {

case 1: palo="oros";
break;
case 2: palo="espadas";
break;
case 3: palo="copas";
break;
case 4: palo="palos";
break;

}


if (aleatorioNumero==8 || aleatorioNumero==9 || aleatorioNumero==10) {

sumaJugador2+=0.5;
}
else {

sumaJugador2+=aleatorioNumero;

}
printf("\nEsta es tu carta jugador 2: %i de %c. Tu puntuacion es de %f.", aleatorioNumero, palo, sumaJugador2);

// Jugador 1 pide carta en caso de no plantarse con la primera carta


while (respuesta=true) {

aleatorioNumero=1+rand()%(10-1);
aleatorioPalo=1+rand()%(4-1);


if (aleatorioNumero<=7){

sumaJugador1+=aleatorioNumero;

}
else{

sumaJugador1+=0.5;


}
switch (aleatorioPalo) {

case 1: palo="oros";
break;
case 2: palo="espadas";
break;
case 3: palo="copas";
break;
case 4: palo="palos";

}
if (sumaJugador1 > maximaPuntuacion) {

printf("\n -Estas eliminado, te has pasado de SIETE Y MEDIO!");
respuesta=false;
palo="exit";

}
else {

printf("\nEsta es tu carta, el %i de %c, tu puntuacion es de %f.\n",aleatorioNumero, palo, sumaJugador1);
printf("\nJugador 1, si quieres otra carta teclea 'y' si te plantas teclea 'n'.\n");
scanf("%c", &resp);

}
if (resp=='y') {

respuesta=true;

}
else {

respuesta=false;

}
}
printf("\nJugador 2, si quieres otra carta teclea 'y' si te plantas teclea 'n'.\n");
scanf("%c", &resp);

if (resp=='y') {

respuesta=true;
}
else {

respuesta=false;
}

//Jugador 2, pide carta en caso de no plantarse con la primera carta


while (respuesta=true) {

aleatorioNumero=1+rand()%(10-1);
aleatorioPalo=1+rand()%(4-1);


if (aleatorioNumero<=7){

sumaJugador2+=aleatorioNumero;

}
else{

sumaJugador2+=0.5;


}
switch (aleatorioPalo) {

case 1: palo="oros";
break;
case 2: palo="espadas";
break;
case 3: palo="copas";
break;
case 4: palo="palos";

}
if (sumaJugador2 > maximaPuntuacion) {

printf("\n -Estas eliminado, te has pasado de SIETE Y MEDIO!");
respuesta=false;
palo="exit";

}
else {

printf("\nEsta es tu carta, el %i de %c, tu pntuacion es de %f",aleatorioNumero, palo, sumaJugador2);
printf("\nSi quieres otra carta teclea 'y' si te plantas teclea 'n'.\n");
scanf("%c", &resp);

}
if (resp=='y') {

respuesta=true;

}
else {

respuesta=false;

}
}

//Los resultados de la partida se muestran en este bloque


if (sumaJugador1==sumaJugador2) {

printf("\nHABEIS EMPATADO, la puntuacion del jugador 1 es de %f, i la del jugaro 2 es de %f", sumaJugador1, sumaJugador2);

}
if (sumaJugador1>sumaJugador2) {

printf("El jugador 1 HA GANADO! Con una puntuacion de %f, frente a la puntuacion %f del jugador 2.", sumaJugador1, sumaJugador2);

}
if (sumaJugador2>sumaJugador1) {

printf("El jugador 2 HA GANADO! Con una puntuacion de %f, frente a la puntuacion %f del jugador 1.", sumaJugador2, sumaJugador1);

}



return 0;
}
  #2 (permalink)  
Antiguo 02/02/2013, 07:03
 
Fecha de Ingreso: enero-2013
Mensajes: 17
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema con variable char en proyecto c++

char palo[20]; así se declara en C una cadena de texto.... espero te sirva.
  #3 (permalink)  
Antiguo 02/02/2013, 08:19
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Problema con variable char en proyecto c++

En c++ tambien puedes usar el objeto string como en java (ademas de todo lo heredado de c tal como bien te comenta juanfranciscoX):

Código:
//libreria
#include <string>
using namespace std;

//declaracion
string palo;
palo = "oros";
Otra cosa, revisa tu manual porque hay errores de concepto: p.ej. para mostrar una cadena de caracteres con printf el modificador es %s en vez de %c (%c muestra un caracter y %s vuelca una cadena de texto hasta dar con un caracter nulo de final de cadena). Esto te sirve para mostrar la variable 'palo', aunque tal vez te serviria adentrarte un poco mas en c++:

Código:
//heredado de c
char palo[20];
sprintf(palo, "oros");
printf("%s", oros);

//en c++
string palo;
palo = "oros";
cout << palo;
Como ves en c++ las funciones de objetos ya trabajan con el tipo esperado en vez de dejar al programador la opcion de cagarla mostrando un %c en vez de %s, o asignando diferentes tipos del esperado.

Te comento otra cosa: cuando recibes la respuesta en scanf("%c", &resp) la variable esta declarada como boleano pero luego lo tratas como caracter; el funcionamiento es correcto pero el planteamiento no: tanto bool como char ocupan 1 byte y ambos pueden albergar caracteres reconocibles, y por eso el funcionamiento es correcto; pero el planteamiento es declarar un char para recibir caracteres y declarar boleanos para declarar flags de estado o lo que sea (para el input tambien está la version c++):

Código:
char resp;//sin array porque solo esperas un caracter, ocupa 1 byte igual que bool y puede albergar los mismos datos

//input herdado de c
scanf("%c", &resp);

//input en c++
cin >> resp;

//lo demas todo igual
if(resp == 'y') {
    ...
}
...
Lo siguiente ya es implementar la version grafica :)

Saludos
vosk
  #4 (permalink)  
Antiguo 02/02/2013, 08:32
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Problema con variable char en proyecto c++

Por cierto, el palo 'palos' se llama 'bastos', no está el siete de palos sino el siete de bastos :)

Otra cosa, si vas a usar el rand tienes que inicializarlo con srand:

Código:
char *palos[] = {"oros", "espadas", "copas", "bastos"};
int aleatorioPalo;
char *palo;

srand(time(0));
aleatorioPalo = 1+rand()%(4-1);
palo = palos[aleatorioPalo];

printf("%s", palo);
Saludos
vosk
  #5 (permalink)  
Antiguo 02/02/2013, 15:30
Avatar de adrirs11  
Fecha de Ingreso: diciembre-2012
Ubicación: BCN
Mensajes: 107
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Problema con variable char en proyecto c++

Me ha quedado bastante claro, en cuanto pueda lo probare para ver si todo funciona, gracias
  #6 (permalink)  
Antiguo 02/02/2013, 22:26
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Problema con variable char en proyecto c++

Cita:
aleatorioPalo = 1+rand()%(4-1);
con esto el numero aleatorio es de 1 a 3, no tiene q ser de 0 a 3??? osea:
Código C:
Ver original
  1. aleatorioPalo = rand() % 4;


Saludos
  #7 (permalink)  
Antiguo 03/02/2013, 04:10
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Problema con variable char en proyecto c++

Si perdon, en mi ultimo post si que tendria que ser así. Y en el codigo original de adrirs11 tendria que ser entre 1 y 4 (ambos incluidos).

Saludos
vosk
  #8 (permalink)  
Antiguo 03/02/2013, 05:49
Avatar de adrirs11  
Fecha de Ingreso: diciembre-2012
Ubicación: BCN
Mensajes: 107
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Problema con variable char en proyecto c++

Resulta que ahora me da un warning en cada printf, nose si sera por lo de haber cambiado palo a string.... en el printf para escribir el string es %s verdad?? pues en xcode me dice....cannot pass objects of non-POD type 'struct std:::string' through '...'; call will abort at runtime.
  #9 (permalink)  
Antiguo 03/02/2013, 06:20
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Problema con variable char en proyecto c++

No, el string de c++ es un objeto y no puede salir por printf tal cual, tienes que 'sacar' su cadena de texto con el metodo c_str o bien usar cout para la salida estandar

Código:
string palo = "hola";

//con printf
printf("%s", palo.c_str());

//con cout
cout << palo;
Saludos
vosk
  #10 (permalink)  
Antiguo 04/02/2013, 10:27
Avatar de adrirs11  
Fecha de Ingreso: diciembre-2012
Ubicación: BCN
Mensajes: 107
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Problema con variable char en proyecto c++

Funciona perfecto con .c_str() muchas gracias vosk!

Etiquetas: char, ejercicio, int, proyecto, string, variables
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 22:06.