[C con Clase] Problema con array

Davidson, Steven srd4121 en njit.edu
Dom Mayo 21 06:00:14 CEST 2017


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.
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20170521/14bba913/attachment.html>


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