[C con Clase] Problema con array

Sebastian Toledano toledanosebastian en gmail.com
Lun Mayo 22 03:36:03 CEST 2017


Gracias Steven, implemente la variable para guardar la decisión del usuario
y obtuve el comportamiento deseado. Tomo el consejo de usar variables
locales. De nuevo gracias.

char PeajeU;

cout << "Pago peaje? ";
cin >> PeajeU;

if (peaje[0] == PeajeU)
    {
        cout << "Cuanto pago? ";
        cin >> Vp;
        cout << "Cuantas veces? ";
        cin >> Nv;
        Co_d = ((K+C+E)+Vp*Nv);
    }
    else
        if(peaje[1] == PeajeU)
         {
            Co_d = K+C+E;
         }

Quise usar la sentencia if (peaje[1] == PeajeU) con la intención de que
solo el carácter 'n' devuelva un valor verdadero.

El 21 de mayo de 2017, 01:00, Davidson, Steven<srd4121 en njit.edu> escribió:

> Hola Sebastián,
>
> Tienes la idea correcta, pero no su implementación. Escribes,
>
> cin >> peaje;
>
> Ten presente que 'cin >>' se comporta de diferente manera según el tipo
> del operando derecho. En este caso, 'cin >>' interpreta 'peaje' como una
> cadena de caracteres y no meramente como un array de caracteres. Esto
> implica que se agregará un carácter nulo al final de los caracteres
> introducidos. Por ejemplo, si escribes: 's', el resultado en 'peaje' es
> "s\0".
>
> Luego, compruebas el resultado de 'peaje' en la sentencia 'if':
>
> if (peaje[0])
>
> Esto comprueba si el valor guardado en el primer elemento - 's' en nuestro
> ejemplo - es el código ASCII 0 (cero), y por tanto falso, o distinto de
> cero, y por tanto verdadero. En otras palabras, la sentencia anterior es
> equivalente a:
>
> if (peaje[0] != 0)
>
> Como los caracteres imprimibles, como 's' y 'n', se representan con
> códigos ASCII a partir del 32, esta condición siempre será verdadera. Lo
> mismo sucede con la siguiente condición, 'peaje[1]', pero esta vez sí
> guardar el carácter nulo y por tanto el código ASCII es 0, resultando
> siempre en una falsedad.
>
> Sin embargo, esto no es el comportamiento deseado. Si quieres conservar
> los valores originales en 'peaje', entonces sugiero crear otra variable
> para guardar la decisión del usuario. Por ejemplo,
>
> char cPeajeUsuario;
>
> cin >> cPagoPeaje;
>
> if( peaje[0] == cPagoPeaje )
> {
>   ...
> }
> else
> {
>   ...
> }
>
> Claro está, siempre puedes comprobar el carácter directamente; esto es,
>
> if( 's' == cPagoPeaje )
>
> Por último, sugiero no usar variables globales, como 'K', 'L', etc.; en su
> lugar, defínelas localmente en 'main()'.
>
>
> Espero que esto te oriente,
>
> Steven
>
>
> 2017-05-20 14:46 GMT-04:00 Sebastian Toledano <toledanosebastian en gmail.com
> >:
>
>> Buenas tardes gente, mi problema es el siguiente: necesito que if tome
>> una determinada decisión basándose en uno de dos valores de un array que yo
>> ingrese por teclado.
>>
>> El ejercicio no me lo exije ya que se debe resolver con lo aprendido. El
>> uso del array solo es para satisfacer mi curiosidad.
>>
>> Codigo C++:
>>
>> /*
>> Este programa toma valores de entrada y devuelve
>> el costo diario que implica el uso de un automovil.
>> */
>> #include <iostream>
>> #include <conio.h>
>>
>> using namespace std;
>>     float K=0;//Kilometros conducidos
>>     float C=0;//Precio/litro de combustible.
>>     float E=0;//Valor de estacionamiento.
>>     float Vp=0;//Valor del peaje.
>>     float Co_d=0;//Consumo  diario.
>>     float Co_s=0;//Consumo semanal.
>>     float Co_m=0;//Consumo mesual.
>>     float Co_3m=0;//Consumo c/90 dias.
>>     int Nv=0;//Cantidad de veces que se pago.
>>
>> int main()
>> {
>>     char peaje[]={'s','n'};
>>     char s;
>>     char n;
>>
>>     cout << "Kms conducidos/dia: ";
>>     cin >> K;
>>     cout << "Valor de combustible/Litro: ";
>>     cin >> C;
>>     cout << "Estacionamiento/dia: ";
>>     cin >> E;
>>     cout << "Pago peaje? ";
>>     cin >> peaje;
>>
>>     if (peaje[0])
>>     {
>>         cout << "Cuanto pago? ";
>>         cin >> Vp;
>>         cout << "Cuantas veces? ";
>>         cin >> Nv;
>>         Co_d = ((K+C+E)+Vp*Nv);
>>     }
>>     else
>>         if(peaje[1])
>>          {
>>             Co_d = K+C+E;
>>          }
>>
>>     if (Vp >= 1)
>>         Co_s = 6*(K+C+E+Vp);
>>     else
>>         Co_s = 6*(K+C+E);
>>
>>     if (Vp >= 1)
>>         Co_m = 26*(K+C+E+Vp);
>>     else
>>         Co_m = 26*(K+C+E);
>>
>>     if (Vp >= 1)
>>         Co_3m = 90*(K+C+E+Vp);
>>     else
>>         Co_3m = 90*(K+C+E);
>>
>>     cout << "\nC/dia\t\t$" << Co_d << endl;
>>     cout << "C/semana\t$" << Co_s << endl;
>>     cout << "C/mes\t\t$" << Co_m << endl;
>>     cout << "C/90 dias\t$" << Co_3m << endl;
>>
>>     return 0;
>> }
>>
>> Mi problema consiste en que si ingreso el valor n cuando me pregunta si
>> pague peaje, inmediatamente me pregunta cuanto y cuantas veces lo que
>> significa que va a sumar al valor general. Podría ingresar 0 en ambos casos
>> pero no es la idea.
>> Ignoren todo a partir de Co_s, pienso hacer que el programa de la
>> posibilidad de elegir si computo diario, semanal, mensual, etc. Pero
>> primero necesito comprender donde estoy fallando con el array.
>> Los valores 0 y 1 en if, corresponderían a las posiciones en el array de
>> los caracteres s y n. No estoy seguro de que mi razonamiento sea correcto.
>>
>> Les pido disculpas si molesto con un problema que puede ser nimio para
>> otros. Muchas gracias comunidad.
>>
>>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20170521/73af6849/attachment.html>


Más información sobre la lista de distribución Cconclase