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

Problema con programa: estoy usando mal el char ó los IF, ELSE?

Estas en el tema de Problema con programa: estoy usando mal el char ó los IF, ELSE? en el foro de C/C++ en Foros del Web. Código: #include <stdio.h> #include <stdlib.h> /* Los empleados de una fábrica trabajan en dos turnos, diurno y nocturno. Se desea calcular el salario de un ...
  #1 (permalink)  
Antiguo 30/01/2015, 12:46
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Pregunta Problema con programa: estoy usando mal el char ó los IF, ELSE?

Código:
#include <stdio.h>
#include <stdlib.h>

/*
Los empleados de una fábrica trabajan en dos turnos, diurno y nocturno. Se desea calcular el salario de un día de trabajo atendiendo a:

• La tarifa horaria diurna es $5.00.
• La tarifa horaria nocturna es $8.00.
• Caso de ser domingo, la tarifa horaria se incrementa en $2.00, si es diurna, y $3.00 en el turno nocturno.
• Un día de trabajo tiene 8 horas, todas en uno solo de los turnos.

Datos de entrada: Turno diurno ó nocturno, horas trabajadas, día de la semana
Datos de salida: Salario de un día de trabajo
*/

int main()
{
    //Declaración de variables
    char lcTurno;
    int liHorasTrabajadas, liDiaSemana, liTotal;

    //Entrada de datos
    printf("Qu%c turno trabaj%c (Diurno = D, Nocturno = N)?: ", 130, 162);
    scanf("%s", &lcTurno);

    if (lcTurno != 'D' && lcTurno != 'd' && lcTurno != 'N' && lcTurno != 'n')
    {
        printf("\nError!, el turno debe ser D %c N.\n", 162);
        return 0;
    }

    printf("Cu%cntas horas trabaj%c?: ", 160, 162);
    scanf("%d", &liHorasTrabajadas);

    if (liHorasTrabajadas <= 0 || liHorasTrabajadas > 8)
    {
        printf("\nError!, las horas trabajadas no puede ser 0 %c mayor que 8.\n", 162);
        return 0;
    }

    printf("Qu%c d%ca de la semana trabaj%c (Lunes = 1, Domingo = 7)?: ", 130, 161, 162);
    scanf("%d", &liDiaSemana);

    if (liDiaSemana <= 0 || liDiaSemana > 7)
    {
        printf("\nError!, los d%cas de la semana debe ser entre 1-7.\n", 161);
        return 0;
    }

    //Procesamiento
    if (lcTurno == 'D' || lcTurno == 'd' && liDiaSemana >= 1 || liDiaSemana <= 6)
    {
        liTotal = liHorasTrabajadas * 5;
        printf("\nA RD$5 la hora, el salario ser%c de: RD$%d\n", 160, liTotal); //Salida de datos
    }

    else if (lcTurno == 'D' || lcTurno == 'd' && liDiaSemana == 7)
    {
        liTotal = liHorasTrabajadas * 7;
        printf("\nA RD$7 la hora, el salario ser%c de: RD$%d\n", 160, liTotal); //Salida de datos
    }

    else if (lcTurno == 'N' || lcTurno == 'n' && liDiaSemana >= 1 || liDiaSemana <= 6)
    {
        liTotal = liHorasTrabajadas * 8;
        printf("\nA RD$8 la hora, el salario ser%c de: RD$%d\n", 160, liTotal); //Salida de datos
    }

    else if (lcTurno == 'N' || lcTurno == 'n' && liDiaSemana == 7)
    {
        liTotal = liHorasTrabajadas * 11;
        printf("\nA RD$11 la hora, el salario ser%c de: RD$%d\n", 160, liTotal); //Salida de datos
    }

    return 0;
}
Siempre se cumple la primera condición, por qué?, estaré usando mal los char? o alguna otra cosa?.

Espero puedan ayudarme, saludos y gracias de antemano.
  #2 (permalink)  
Antiguo 30/01/2015, 16:33
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Problema con programa: estoy usando mal el char ó los IF, ELSE?

lcTurno es de tipo char... para leer un char hay que usar %c en el scanf... %s sirve para leer cadenas... al usar %s el programa está pisando memoria y eso puede provocar casques en la aplicación o comportamientos inesperados.
  #3 (permalink)  
Antiguo 30/01/2015, 17:18
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Problema con programa: estoy usando mal el char ó los IF, ELSE?

Cita:
Iniciado por eferion Ver Mensaje
lcTurno es de tipo char... para leer un char hay que usar %c en el scanf... %s sirve para leer cadenas... al usar %s el programa está pisando memoria y eso puede provocar casques en la aplicación o comportamientos inesperados.
Hola, lo he cambiado a %s y ahora tengo problemas con:

printf("\n2. Ingrese el %cndice de alcohol: ", 161);
scanf("%f", &lfIndiceAlcohol);

cuando entras cualquier dato, el programa se detiene.
Qué pasa ahora?.
No sé que será.

Pasó desde que cambio %s por %c para leer el char.

Última edición por RGT; 30/01/2015 a las 17:39
  #4 (permalink)  
Antiguo 30/01/2015, 18:36
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Problema con programa: estoy usando mal el char ó los IF, ELSE?

esas dos líneas no están en el primer ejemplo
  #5 (permalink)  
Antiguo 31/01/2015, 15:02
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Problema con programa: estoy usando mal el char ó los IF, ELSE?

Cita:
Iniciado por eferion Ver Mensaje
esas dos líneas no están en el primer ejemplo
Hola, excusame, me confundí, estoy haciendo otro y es el mismo problema.
El programa se detiene al ingresar todos los datos desde que cambie a %c.

:(
  #6 (permalink)  
Antiguo 31/01/2015, 16:41
inazense
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con programa: estoy usando mal el char ó los IF, ELSE?

Cita:
Iniciado por RGT Ver Mensaje
Hola, excusame, me confundí, estoy haciendo otro y es el mismo problema.
El programa se detiene al ingresar todos los datos desde que cambie a %c.

:(
Lo acabo de ejecutar en Code:Blocks y no se me cuelga. El resultado que me devuelve es:

Cita:
A RD$5 la hora, el salario será de: RD$25
  #7 (permalink)  
Antiguo 31/01/2015, 19:17
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Problema con programa: estoy usando mal el char ó los IF, ELSE?

Cita:
Iniciado por inazense Ver Mensaje
Lo acabo de ejecutar en Code:Blocks y no se me cuelga. El resultado que me devuelve es:
Hola,
El problema es que siempre se cumple la primera condicion.
Nunca pasa a las demás condiciones.

En otro que tengo, se cuelga y en este que estamos hablando no lee las demas condiciones.
  #8 (permalink)  
Antiguo 01/02/2015, 00:14
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Problema con programa: estoy usando mal el char ó los IF, ELSE?

Código:
#include <stdio.h>
#include <stdlib.h>

/*
Tema: II. Estructuras de selección

La compañía que gestiona la autopista ha decidido cambiar las tarifas de peaje. Estas tarifas
dependen del tipo de vehículo (camión o automóvil) que desee utilizar la autopista, del número de
pasajeros que lleve y de la hora del día: en las horas de alta congestión los automóviles con tres
pasajeros o más no pagan peaje, los otros pagan 30 euros, los camiones pagan 50 euros; en las
horas menos congestionadas el peaje para los automóviles es de 25 euros y para los camiones es
de 30 euros independientemente del número de pasajeros. Escriba un programa que leyendo el
tipo de vehículo, si la hora es de alta congestión o no y el número de pasajeros, calcule la tarifa
que le debe cobrar a un vehículo.

Datos de entrada: Tipo de vehículo (Camión ó Automóvil), Número de pasajeros, Hora de alta congestión o no
Datos de salida: Tarifa a cobrar
*/

int main()
{
    //Declaración de variables
    char lcTipoVehiculo[10], lcHoraAlta[3];
    int liNumeroPasajeros;

    //Entrada de datos
    printf("Ingrese tipo de veh%cculo (Cami%cn %c Autom%cvil): ", 161, 162, 162, 162);
    scanf("%s", lcTipoVehiculo);

    printf("N%cmero de pasajeros: ", 163);
    scanf("%d", &liNumeroPasajeros);

    printf("Hora de alta congesti%cn (Si %c No): ", 162, 162);
    scanf("%s", lcHoraAlta);

    //Procesamiento
    if (lcHoraAlta == 'SI' || lcHoraAlta == 'si' && lcTipoVehiculo == 'AUTOMOVIL' || lcTipoVehiculo == 'automovil' && liNumeroPasajeros >= 3)
    {
        printf("\nN%c paga peaje.\n", 162);
        return 0;
    }

    else if (lcHoraAlta == 'SI' || lcHoraAlta == 'si' && lcTipoVehiculo == 'AUTOMOVIL' || lcTipoVehiculo == 'automovil' && liNumeroPasajeros < 3)
    {
        printf("\nTarifa: EUR$30.\n");
        return 0;
    }

    //Salida de datos

    return 0;
}
hola hermano, pasa lo mismo con este programa.
No se léen las condiciones, simplemente ingresas los datos y el programa se detiene.
No sé que pasa con la lectura de cadenas.
  #9 (permalink)  
Antiguo 02/02/2015, 00:57
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Problema con programa: estoy usando mal el char ó los IF, ELSE?

Código C:
Ver original
  1. lcHoraAlta == 'SI'

Estás programando en C, y en este lenguaje las cadenas de caracteres no se pueden comparar así. Esa instrucción realmente está comparando dos punteros y, dado que cada uno va a apuntar a una dirección diferente, NUNCA vas a entrar en el if.

Para comparar cadenas tienes que usar la función strcmp. La cual te devuelve 0 si ambas cadenas son iguales.

Además, las cadenas de caracteres se deben declarar con comillas dobles (") no con comillas simples (')

Código C++:
Ver original
  1. if ( !strcmp( lcHoraAlta, "SI" ) )

Un saludo

Etiquetas: char, estructuras, 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 14:11.