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

Necesito el contenido y obtengo la dirección del campo

Estas en el tema de Necesito el contenido y obtengo la dirección del campo en el foro de C/C++ en Foros del Web. Que tengan todos un muy buen dia Crean me que es la primera ves que uso estructuras y prototipos con funciones y precisamente por ser ...
  #1 (permalink)  
Antiguo 28/05/2008, 12:12
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Necesito el contenido y obtengo la dirección del campo

Que tengan todos un muy buen dia
Crean me que es la primera ves que uso estructuras
y prototipos con funciones y precisamente por ser
la primera ves no creo haberlo echo tan mal (risas)
el caso es que empecé con 30 errores y después de
muuuuuchas horas logre compilar el código pero el
caso es que el resultado que obtengo es la dirección
de memoria del campo y no el contenido.-
Me agradaría que además de marcarme el error
que estoy cometiendo, me dijeran en que debería
mejorar la sintaxis (luego le voy a agregar "Memoria" y a
validar si en ves de números se ingresaran por ej. letras)

Código:
#include <iostream>
#include <cstdlib> 

using namespace std;

struct calcular
{ 
   double valorUno; 
   double valorDos; 
   double resultado; 
};

double resultado(string signo);
void ingValores();

int main(int argc, char *argv[])
{
  ingValores();
  calcular rv; 
  int opcion = 0;
  while(1)
  {
    system("cls");      
    cout << "Que deseas hacer..?\n";
    cout << "\n[1]-Sumar\n";
    cout << "[2]-Restar\n";
    cout << "[3]-Multiplicar\n";
    cout << "[4]-Dividir\n";
    cout << "[5]-Cambiar los valores\n";
    cout << "[6]-Salir\n";
    cout << "\nSeleccione: ";
    cin >> opcion;
    switch(opcion)
    {
      case 1: resultado("Sumar");
              break;
      case 2: resultado("Restar");
              break;
      case 3: resultado("Multiplicar");
              break;
      case 4: resultado("Dividir");
              break;
      case 5: ingValores();
              break;
      case 6: exit(0);
    }
    cout << "\n";
    cout << "Apriete una tecla para seleccionar...";
    system("pause>nul");
  }
  return EXIT_SUCCESS;
}

double resultado(string signo)
{
    calcular rv; 
    if(signo == "Sumar")
    {         
        rv.resultado = rv.valorUno + rv.valorDos; 
        cout << "El resultado de sumar: " << rv.valorUno << " + " << rv.valorDos << " = " << rv.resultado;
    }
    if(signo == "Restar")
    {
        rv.resultado = rv.valorUno - rv.valorDos; 
        cout << "El resultado de restar: " << rv.valorUno << " - " << rv.valorDos << " = " << rv.resultado;
    }
    if(signo == "Multiplicar")
    {
        rv.resultado = rv.valorUno * rv.valorDos; 
        cout << "El resultado de multiplicar: " << rv.valorUno << " * " << rv.valorDos << " = " << rv.resultado;
    }
    if(signo == "Dividir")
    {
        rv.resultado = rv.valorUno / rv.valorDos; 
        cout << "El resultado de dividir: " << rv.valorUno << " / " << rv.valorDos << " = " << rv.resultado;
    }
}

void ingValores()
{
   calcular rv; 
   cout << "Ingresa un valor..:";
   cin >> rv.valorUno;
   cout << "Ingresa otro......:";
   cin >> rv.valorDos;
}
Desde ya muchas gracias por la ayuda que deseen brindarme
Un gran abrazo
El autodidacta DanielC++
  #2 (permalink)  
Antiguo 28/05/2008, 12:26
 
Fecha de Ingreso: marzo-2008
Mensajes: 306
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Necesito el contenido y obtengo la dirección del campo

El problema es que en las funciones "resultado" e "ingValores" estas definiendo la variable local rv que son independientes. Asi los valores que rellenas en "ingValores" se quedan ahí perdidos en cuanto el programa sale de dicha función ya que no se exportan por arte de magia a las otras variables que se llaman igual.

Tienes dos opciones,
- Que dicha variable sea global al módulo (en tu caso programa). Para eso en lugar de estar definida dentro del main debe estar fuera del main. Y luego eliminas la declaracion que tienes en las funciones "resultado" e "ingValores".
- Que dicha variable se reciba como parámetro en esas dos funciones. Debes definirla como puntero a estructura o como referencia (esto es exclusivo de C++ y no existe en C), aquí tambien debes eliminar la declaracion de las variables locales que tienes en las funciones "resultado" e "ingValores".

Dado que es un programa muy sencillo, parece que la opción mas fácil es la primera.

En cuanto a la sintaxis yo uso una notación propia en la que los nombres de las variables tienen un prefijo que viene determinado por el ambito de la misma (local, global, parámetro) y el tipo (estructura, entero, char, long, ...), y tambien algo parecido para los nombres de funciones.
__________________
Pop & Rock Bands
Pop Music Stars
  #3 (permalink)  
Antiguo 28/05/2008, 16:04
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Necesito el contenido y obtengo la dirección del campo

Muchas gracias por tu respuesta "00siete"
voy a tratar de asimilar lo más posible la
respuesta.-

Un gran abrazo
El autodidacta DanielC++
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 09:30.