[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