Autor
|
Tema: solicitar día de la semana e imprimir número correspondiente (Leído 2,250 veces)
|
cargs
Desconectado
Mensajes: 4
|
Soy muy nuevo, lo que quiero hacer es hacer funcionar un programa parecido al que pongo, pero a la inversa, es decir, leer el día de la semana (lunes) y que se imprima el número correspondiente (1) para martes 2, etc, ¿cómo se hace?
/** * C program to print day of week using switch case */
#include <stdio.h>
int main() { int week; /* Input week number from user */ printf("Enter week number(1-7): "); scanf("%d", &week); switch(week) { case 1: printf("Monday"); break; case 2: printf("Tuesday"); break; case 3: printf("Wednesday"); break; case 4: printf("Thursday"); break; case 5: printf("Friday"); break; case 6: printf("Saturday"); break; case 7: printf("Sunday"); break; default: printf("Invalid input! Please enter week number between 1-7."); }
return 0; }
|
|
|
En línea
|
|
|
|
K-YreX
|
Si estás empezando, hacerlo a la inversa es un poco más complicado pero te comento lo que deberías mirar: - Uso de cadenas de C (arrays de <char>) estáticas (también puedes usar memoria dinámica pero mejor dejar esa parte para más adelante)
- Algunas funciones para trabajar con cadenas de C. La más útil es para comparar dos cadenas <strcmp()> y <strncmp()> (recomendable usar la segunda porque puedes indicar cuántos caracteres comparar de ambas cadenas). Además para pedir una cadena C al usuario deberás usar <fgets()> en lugar de <scanf()>. Te dejo cómo se usan:
strcmp(const char *cadena1, const char *cadena2); -> Retorna: -1 (cadena1 < cadena2) / 0 (cadena1 == cadena2) / 1 (cadena1 > cadena2) usando el orden lexicográfico. strncmp(const char *cadena1, const char *cadena2, size_t longitud); -> Igual que la anterior pero compara tantos caracteres como se indica en <longitud> o hasta que una cadena termina. fgets(char *cadena, int longitud, FILE *stream); -> Almacena en <cadena> lo introducido por la entrada. Usar como <stream> <stdin> para la entrada estándar (teclado). <longitud> determina el número máximo de caracteres que se van a almacenar (normalmente el tamaño de <cadena>). Yo te recomendaría una forma poco eficiente pero más simple que sería: de forma manual hacer un bloque de <if-else-if> y en cada uno comparar la entrada con cada uno de los días de la semana (colocar de forma manual el número de caracteres a comparar según el día): if(strncmp(cadenaUsuario , "Lunes", 5) == 0) // lo que quieras hacer si es lunes else if(strncmp(cadenaUsuario , "Martes", 6) == 0) // lo que quieras hacer si es martes //...
PD 1: Cuidado con las mayúsculas/minúsculas ya que hacen que una cadena con el mismo contenido se interprete como cadenas distintas. Echa un vistazo a lo comentado antes y anímate a intentarlo. Si tienes algún problema, envía tu código para que podamos ver el problema y ayudarte. PD 2: No olvides colocar los códigos entre etiquetas de Código GeSHi...
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
cargs
Desconectado
Mensajes: 4
|
Wow! ok, muchas gracias, voy a revisar!! Saludos!
|
|
|
En línea
|
|
|
|
cargs
Desconectado
Mensajes: 4
|
Hola, pude avanzar, el programa debe solicitar el mes y como resultado mostrar el número de mes (1 para enero, 2 para febrero, 3 para marzo) y la estación del año correspondientes.El usuario debe introducir el mes en minúsculas. Si el usuario ingresa mal u otra cosa, debe aparecer "prueba de nuevo" En el código que hice, funciona para diciembre, pero para los demás meses como resultado manda el número de mes y la estación, pero además el mensaje de "prueba de nuevo" ¿Qué debo hacer para que solo mande el número de mes y la estación? este es el código: #include <stdio.h> #include <string.h> char mes[100]; int main() { printf("Cual es el mes? (en minusculas)\n"); if (strcmp(mes , "enero") == 0) { } if (strcmp(mes , "febrero") == 0) { } if (strcmp(mes , "marzo") == 0) { } if (strcmp(mes , "abril") == 0) { } if (strcmp(mes , "mayo") == 0) { } if (strcmp(mes , "junio") == 0) { } if (strcmp(mes , "julio") == 0) { } if (strcmp(mes , "agosto") == 0) { } if (strcmp(mes , "septiembre") == 0) { } if (strcmp(mes , "octubre") == 0) { } if (strcmp(mes , "noviembre") == 0) { } if (strcmp(mes , "diciembre") == 0) { } else { } return 0; }
|
|
|
En línea
|
|
|
|
K-YreX
|
Eso es porque usas condicionales aislados. Es decir, que has utilizado un conjunto de condiciones que son independientes por lo que tu programa las comprueba todas. En estos casos en los que una coincidencia en un <if> excluye que pueda ser verdadera otra coincidencia se usa <if - else if - else if - ... - else>. Aquí tienes un código sencillo que funciona correctamente pero que no es muy eficiente ya que se compara el valor de <numero> con 1 y coincida o no, se compara con 2 y coincida o no se comprueba que el número sea distinto de 1 y de 2: (Sé que el código es un poco absurdo pero me parecía un buen ejemplo para mostrarte el problema) int numero = 1; if(numero == 1) if(numero == 2) if(numero != 1 && numero != 2) printf("El numero es distinto de 1 y de 2");
Se ve claramente que si el número vale 1 ya no va a valer 2 ni ningún otro valor. Por lo que se puede hacer más eficiente así: int numero = 2; if(numero == 1) // si vale 1... else if(numero == 2) // si no vale 1, si vale 2... else // si no vale 1 ni 2... ya se da por hecho que es distinto de 1 y de 2 printf("El numero es distinto de 1 y de 2");
En este caso se comprueba cada <if> hasta que uno sea cierto y en el momento que uno es cierto no sigue comprobando el resto de condiciones. En tu caso compruebas de forma aislada cada mes excepto el último y en el último haces: si mes == "diciembre" entonces 12 invierno sino entonces prueba de nuevo fin si Entonces ese <sino> se ejecutará siempre que el mes no sea igual a "diciembre".
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
cargs
Desconectado
Mensajes: 4
|
perfecto, ya quedó! muchas gracias por tus explicaciones, me ayudaron enormemente!!!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ASM + Visual Basic Duda Imprimir Numero
« 1 2 »
Programación Visual Basic
|
Danyfirex
|
13
|
6,974
|
11 Octubre 2012, 15:23 pm
por Danyfirex
|
|
|
Twitter empieza a solicitar el número de teléfono a los que crean cuentas a ...
Noticias
|
wolfbcn
|
0
|
1,791
|
3 Marzo 2015, 18:50 pm
por wolfbcn
|
|
|
Aporte: escribir un numero e imprimir el numero en cadena
Programación C/C++
|
Mario Olivera
|
2
|
2,685
|
26 Abril 2015, 01:35 am
por Mario Olivera
|
|
|
Necesito imprimir el numero de tiradas que hice hasta conseguir el no. ganador
Programación C/C++
|
soccgy
|
2
|
2,041
|
1 Abril 2016, 07:42 am
por 7125139
|
|
|
Solicitar ayuda: calcular el número total de instrucciones ejecutadas x programa
Hardware
|
andermanz
|
4
|
2,217
|
25 Enero 2018, 16:54 pm
por andermanz
|
|