none
Problema con variables tipo char RRS feed

  • Pregunta

  • Tengo problemas con con una variable tipo char, el siguiente programa se ejecuta bien cuando defino la variable así  (char Articulo;) pero cuando la defino para una cadena de caracteres (char Articulo[21];) me pide la cadena y después me saca del programa, no se como arreglarla

    Aquí les dejo el programa, le agradezco la ayuda

    #include <iostream>
    using namespace std;

    float main()
    {
    int CostoBasico;
    float CostoTotal = 0;
    char Articulo[21];

    cout << "Digite el nombre del articulo:\n";
    cin >> Articulo[21];
    cout << "Digite el costo basico del articulo\n";
    cin >> CostoBasico;

    if(CostoBasico <= 30)
       cout << "El costo total del articulo\t" << Articulo[21] << "\t es $" << CostoBasico;
    else
    if((CostoBasico > 30) && (CostoBasico <= 60))
    {
    CostoTotal = CostoBasico + (CostoBasico*0.3);
    cout << "El costo total del articulo\t" << Articulo[21] << "\t es $" << CostoTotal;
    }
    else
    if((CostoBasico > 60) && (CostoBasico <= 400))
    {
    CostoTotal = CostoBasico + (CostoBasico*0.4);
       cout << "El costo total del articulo\t" << Articulo[21] << "\t es $" << CostoTotal;
    }
    else
    {
    CostoTotal = CostoBasico + (CostoBasico*0.5);
       cout << "El costo total del articulo\t" << Articulo[21] << "\t es $" << CostoTotal;
    }
    cin.ignore();
    cin.get();
    }

    lunes, 12 de noviembre de 2012 4:50

Respuestas

  • El estándar de C y C++ exigen que main() devuelva int.  No void, no float:  int.  Luego cin >> Articulo[21]; es incorrecto.  Lo correcto sería cin >> Articulo, pero nótese que es peligroso así el operador >> no sabe cuánta memoria hay en el arreglo de carácteres.  Lo mejor es usar la función global std::getline() y una variable tipo std::string para no tener problemas de memoria corrupta.

    Luego esto:  cout << "El costo total del articulo\t" << Articulo[21] también está incorrecto pues está usted leyendo la posición número 21 del arreglo que no existe.  Es una violación de acceso a memoria que no ha sido reservada apropiadamente.


    Jose R. MCP
    Code Samples

    martes, 13 de noviembre de 2012 0:12
    Moderador