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

Problema para leer cadena de caracteres en C

Estas en el tema de Problema para leer cadena de caracteres en C en el foro de C/C++ en Foros del Web. Hola soy nuevo en el foro , estoy realizando un Juego en C que me pidieron en facultad . Se trata de un juego de ...
  #1 (permalink)  
Antiguo 07/06/2015, 14:18
 
Fecha de Ingreso: junio-2015
Mensajes: 3
Antigüedad: 9 años, 6 meses
Puntos: 0
Problema para leer cadena de caracteres en C

Hola soy nuevo en el foro , estoy realizando un Juego en C que me pidieron en facultad . Se trata de un juego de Piedra , Papel o tijera estoy teniendo problemas con las entradas (se asume que todas las entradas que realiza el usuario son validad) las opciones son (Pi o Piedra) para elegir Piedra para tijera las opciones son (T o Tijera) y para Papel (Pa o Papel), y otra opcion para Salir que es (Salir) . Estuve intentando hacerlo con un switch pero se me complica para recorrer letra por letra en la cadena no esta permitido usar cualquier funcion solo :scanf, printf, getchar y putchar.
Agradeceria mucho su ayuda ya que hace poco tiempo que comenze a programar.
Desde ya gracias .
  #2 (permalink)  
Antiguo 08/06/2015, 05:23
 
Fecha de Ingreso: junio-2015
Mensajes: 2
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema para leer cadena de caracteres en C

Prueba esta opción:
declara un buffer que sea un vector de seis elementos de tipo char, una cadena de caracteres.
Después consiste en en hacer un
Código C:
Ver original
  1. scanf("%s", buffer);
y luego un switch
Código C:
Ver original
  1. switch(buffer){
  2. case "pi":
  3. case "Pi":
  4. case "PI":
  5. //Código en caso de que sea piedra
  6. break;
  7. case "t":
  8. case"T":
  9. //Codigo en caso de que sea tijera
  10. break;
  11. case "Pa":
  12. case "pa":
  13. case"PA":
  14. //Codigo en caso de que sea papel
  15. break;
  16. case "salir":
  17. case "Salir":
  18. case "SALIR":
  19. return 0;
  20. default:
  21. printf("Opción incorrecta.");
  22. break;
  23. }

Última edición por tote_skyria; 08/06/2015 a las 05:30
  #3 (permalink)  
Antiguo 09/06/2015, 03:41
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Problema para leer cadena de caracteres en C

Cita:
Iniciado por tote_skyria Ver Mensaje
y luego un switch
Cuando consigas que switch funcione con cadenas de caracteres me avisas.

Lamento darte malas noticias, pero ese código no va a funcionar.

Tienes que sustituir los case por if. No te queda otra:

Código C:
Ver original
  1. if( strcmp( buffer, "pi" ) || strcmp( buffer, "Pi" ) || strcmp( buffer, "PI" ) )
  2. {
  3.   // ...
  4. }
  5. else if ( strcmp( buffer, "t" ) || strcmp( buffer, "T" ) )
  6. {
  7.   // ...
  8. }
  9. // ...

Ahora, que tener que comprobar todas las formas de la palabra es bastante engorroso, como estás comprobando. En este caso puedes solucionarte un poco la vida si realizas una conversión a minúsculas (o mayúsculas, según prefieras):

Código C:
Ver original
  1. char* ptr;
  2. for( ptr = buffer; *ptr; ++ptr){
  3.   *ptr = tolower(*ptr);
  4. }
  5.  
  6. if( strcmp( buffer, "pi" ) ) // Ya no hace falta comprobar Pi ni PI ni pI
  7. {
  8.   // ...
  9. }
  10. else if ( strcmp( buffer, "t" ) )
  11. {
  12.   // ...
  13. }
  14. // ...

Un saludo
  #4 (permalink)  
Antiguo 09/06/2015, 20:00
 
Fecha de Ingreso: junio-2015
Mensajes: 3
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema para leer cadena de caracteres en C

El problema es que no puedo usar funciones. Por lo tanto la solucion que me diste no me resulta valida. De todas maneras gracias.
  #5 (permalink)  
Antiguo 10/06/2015, 00:08
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Problema para leer cadena de caracteres en C

Cita:
Iniciado por aguston Ver Mensaje
El problema es que no puedo usar funciones. Por lo tanto la solucion que me diste no me resulta valida. De todas maneras gracias.
En cualquier caso, el if lo tienes que usar igual ya que la opción del switch no te va a funcionar.

Aún así, por lo que comentas, que no puedas usar funciones de la librería estándar no implica que no puedas crearte tus propias funciones. En base a lo que has puesto en tu primer mensaje, yo no veo inconveniente en crearte una función que compare dos cadenas de caracteres, que es algo bastante sencillo:

Código C:
Ver original
  1. int compararCadenas( char* cad1, char* cad2 )
  2. {
  3.   while( *cad1 && *cad2 && *cad1 == *cad2 )
  4.   {
  5.     cad1++;
  6.     cad2++;
  7.   }
  8.  
  9.   return *cad1 - *cad2;
  10. }

Básicamente iteras sobre las dos cadenas hasta que alcances el caracter nulo '\0' o te encuentres con que ambas cadenas son diferentes. Cuando no se cumpla una de esas condiciones sales del bucle y realizas una resta de los caracteres actuales... si ambas cadenas son iguales, restarás dos caracteres nulos y '\0' - '\0' = 0; en cambio, si ambas cadenas son diferentes esa resta arrojará un resultado distinto a 0... luego las cadenas son iguales si la función retorna 0 y diferentes en caso contrario.

Para pasarlas a minúsculas puedes operar de forma similar, pero eso ya corre de tu cuenta.

Un saludo

Última edición por eferion; 10/06/2015 a las 00:16

Etiquetas: cadena, caracteres, char, funcion, int, programa
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 00:41.