2012-11-29 100 views
2

嗯,我想在我的程序中做一些基本的操作,比如減法和乘法... 我定義了「get」併爲我的類設置了方法....但是當我將多重操作應用到double和一個int,我得到的值,如:1.7E-3.17 ....爲什麼我在用double乘以int時會出錯值?

這裏是我的代碼: 是西班牙語,但...我相信你會明白

MAIN:

#include <cstdlib> 
#include <iostream> 
#include "Tienda.h" 
#define numeroClientes 2 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
Cliente arregloClientes[numeroClientes]; 
string name; 
int day, amount,i; 
Tienda tienda = Tienda(); 


for(i=0; i<numeroClientes; i++){ 
system("cls"); 
cout<<"Ingrese el nombre del cliente: "; 
cin>>name; 
arregloClientes[i].setNombre(name); 
cout<<"Ingerese numero de garrafones: "; 
cin>>amount; 
arregloClientes[i].setNumeroGarrafones(amount); 
cout<<"Ingrese el dia de la compra"<<endl; 
cout<<"0; Lunes 1; Martes 2; Miercoles 3; Jueves 4; Viernes: "; 
cin>>day; 
arregloClientes[i].setDia(day); 
} 

//Calculo del monto a pagar 
for(i=0; i<numeroClientes; i++){ 
tienda.calcular(arregloClientes[i]);  
} 

system("cls"); 
//Impresion de los datos 
for(i=0; i<numeroClientes; i++){ 
cout<<"------------------------"<<endl; 
arregloClientes[i].imprimir();  
} 
cout<<"------------------------"<<endl; 
tienda.imprimir(); 

cout<<"\n\n"; 
system("PAUSE"); 
return EXIT_SUCCESS; 

}

class Cliente { 

    /* Atributos privados */ 
    private: 
    string nombre; 
    int numeroGarrafones; 
    int dia; // 1 - 5 
    double totalCancelar; 

    /* Metodos publicos */ 
    public: 

    string getNombre(); 
    int getNumeroGarrafones(); 
    int getDia();   
    double getTotalCancelar(); 
    void setNombre(string nomb); 
    void setNumeroGarrafones(int nG); 
    void setDia(int d); 
    void setTotalCancelar(double tC); 
    void imprimir(); 
    string imprimirDia(); 

    }; // fin de clase Cliente 

的問題是在這裏:

void Tienda::calcular(Cliente persona){ 
double aux,total; 
    int garrafones= persona.getNumeroGarrafones();; 

arregloDias[persona.getDia()]= arregloDias[persona.getDia()] +      persona.getNumeroGarrafones(); 

aux = garrafones * precioVenta - garrafones * precioCosto;     

ganancia = ganancia + aux; 

total = garrafones * precioVenta; 

persona.setTotalCancelar(total); 

} // fin de calcular 

This one: 
aux = garrafones * precioVenta - garrafones * precioCosto; 

操作乘法......我

的人都知道發生什麼事之前說的生成的數字?

+0

您可能忘記了初始化。確保您正在進行操作的變量已初始化爲某個值 – dchhetri

+0

我確信您可以在簡單的自包含程序中重現問題。如果你這樣做,並張貼明智的縮進和格式,更有可能閱讀它。 – Useless

+1

在該行上設置了一個斷點,並檢查'​​aux','garrafones','precioVenta'和'precioCosto'的值是什麼,這應該可以幫助您確定發生了什麼。 –

回答

0

我不認爲這是一個int *雙重問題,而是一個單位化成員問題。

轉到關注的線:

aux = garrafones * precioVenta - garrafones * precioCosto; 

該行之前,添加代碼:(或使用您值得信賴的調試器,如果你知道如何設置斷點和檢查expressionvalues)

的printf(」 - >%d%.6g%.6g \ n「,garrafones,precioVenta,precioCosto);

我相信你可能會發現你的Tienda對象的成員實例是單元化的並且包含「隨機」值。

+0

這是Tienda類的構造函數: Tienda :: Tienda(void){0} {0} {0} {0} precioVenta = 2.5; precioCosto = 2.1; ganancia = 0; for(int i = 0; i

+0

「但現在我的新的值是0不是一個罕見像1.06e2586 .....所以......「對不起,我不明白。你能否提供一些細節?你說「現在」。這是否意味着你改變了一些東西?從printf或調試器獲得的aux,garrafones,precioVenta和precioCosto的值是什麼? –

+0

對於兩個客戶端我得到這個: 我用printf函數之前運行的變量... - > 5 2.5 2.1 - > 6 2.5 2.1 似乎一切都確定了的initialisations ... –

0

在計算之前,您使用「tienda」的唯一時刻是您調用構造函數的時間。你應該檢查你是否正在初始化構造函數中的precioVenta和precioCosto,我猜那些是固定值並且屬於「Tienda」類,以防那些不是全局變量(並且在那種情況下,你應該初始化它)。

相關問題