2014-04-02 333 views
0
#include<iostream> 
#include<cstdlib> 
using namespace std; 
main() 
{ 
int gans[20]={43575, 87565, 33256, 92394, 12839, 30956, 23595, 21983, 10223, 65805, 000001, 32998, 47899, 56688, 55442, 63363, 65897, 12758, 32546, 42536};  
double premios[]={500.00, 700.00, 800.00, 900.00, 1200.00, 1500.00, 1800.00, 2000.00, 2100.00, 2300.00, 2800.00, 3000.00, 3200.00, 3500.00, 4000.00, 10000.00, 100000.00, 200000.00, 500000.00, 1000000 };  

int bolcliente, i;  
cout<<"Introduzca su numero de boleto: "; 
cin>>bolcliente; 


if(bolcliente==gans[0]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[0]<<" pesos";} 
if(bolcliente==gans[1]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[1]<<" pesos";} 
    if(bolcliente==gans[2]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[2]<<" pesos";} 
    if(bolcliente==gans[3]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[3]<<" pesos";} 
    if(bolcliente==gans[4]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[4]<<" pesos";} 
    if(bolcliente==gans[5]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[5]<<" pesos";} 
     if(bolcliente==gans[6]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[6]<<" pesos";} 
     if(bolcliente==gans[7]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[7]<<" pesos";} 
     if(bolcliente==gans[8]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[8]<<" pesos";} 
     if(bolcliente==gans[9]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[9]<<" pesos";} 
      if(bolcliente==gans[10]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[10]<<" pesos";} 
      if(bolcliente==gans[11]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[11]<<" pesos";} 
      if(bolcliente==gans[12]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[12]<<" pesos";} 
      if(bolcliente==gans[13]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[13]<<" pesos";} 
       if(bolcliente==gans[14]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[14]<<" pesos";} 
       if(bolcliente==gans[15]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[15]<<" pesos";} 
       if(bolcliente==gans[16]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[16]<<" pesos";} 
       if(bolcliente==gans[17]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[17]<<" pesos";} 
        if(bolcliente==gans[18]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[18]<<" pesos";} 
        if(bolcliente==gans[19]) {cout<<"Felicidades, haz ganado el premio de: "<<premios[19]<<" pesos";} 
        else{cout<<"Lo sentimos, no haz ganado premio alguno, suerte para la proxima"<<endl;   }  



system("pause"); 
} 

嗨,你能幫我一下嗎?這個程序是西班牙文,你可以看到,它要求用戶輸入他的樂透彩票號碼,如果他是一個贏家(陣列中的任何號碼),那麼打印一條消息,如果他沒有贏得消息應該用另一條信息打印,但是如果他是贏家,即使他贏了也會打印其他條件,你能幫我解決這個錯誤嗎?如果其他條件的錯誤

+1

你幾乎可以用一個'std :: find'調用和一個if-else替換所有的巨塊。 – chris

+0

我還是不知道很多功能,這就是爲什麼即時通訊使我可以,但是,謝謝... –

回答

0

如果有50個數字而不是20個呢? 100個數字而不是20個呢?你會把所有這些如果陳述寫成100次嗎? 1000件物品怎麼樣?你會厭倦你寫代碼的方式。

想想這樣 - 要麼找到了物品,要麼沒有找到物品。因此有兩種情況。根據這些信息,考慮如何使用這些信息重寫你的if/else。

下面是相同的代碼具有更理智的方法(它會解決你的問題):

#include <iostream> 
#include <cstdlib> 
#include <algorithm> 

using namespace std; 

int main() 
{ 
    int gans[]={43575, 87565, 33256, 92394, 12839, 30956, 23595, 21983, 10223, 65805, 
       000001, 32998, 47899, 56688, 55442, 63363, 65897, 12758, 32546, 
       42536};  
    const int numGans = sizeof(gans)/sizeof(gans[0]); 
    double premios[]={500.00, 700.00, 800.00, 900.00, 1200.00, 1500.00, 1800.00, 
         2000.00, 2100.00, 2300.00, 2800.00, 3000.00, 3200.00, 3500.00, 
         4000.00, 10000.00, 100000.00, 200000.00, 500000.00, 1000000 
        };  
    int bolcliente, i;  
    cout<<"Introduzca su numero de boleto: "; 
    cin>>bolcliente; 
    int* pGans = std::find(gans, gans + numGans, bolcliente); 

    // found an item 
    if (pGans != gans + numGans) 
    { 
     int whichOne = std::distance(gans, pGans); 
     cout << "Felicidades, haz ganado el premio de: "<< 
       premios[whichOne]<<" pesos"; 
    } 
    else 
    // didn't find the item 
     cout<<"Lo sentimos, no haz ganado premio alguno, suerte para la proxima" 
      << endl; 
} 

注意使用的find()。如果找不到該項目,則返回的指針將指向一個超過最後一個有效項目的指針。

如果找到該項目,那麼爲了找到找到的項目,我們調用std :: distance()來計算第一個項目和找到的項目之間的項目數量。底線是這樣的 - 如果你看到自己一遍又一遍地寫同樣的東西(在你的情況下是20次),唯一的區別是這裏的變量或數字,或者代碼模式是相似的,那麼是時候看看代碼,看看它是否可以用更短的方式重寫。

即使您無法想到使用算法,for()循環可能已被寫入循環,直到找到正確的數字。

bool found = false; 
for (int i = 0; i < numGans && !found; ++i) 
{ 
    if (gans[i] == bolcliente) 
    { 
     cout << "Felicidades, haz ganado el premio de: " << premios[i] << " pesos"; 
     found = true; 
    } 
} 
if (!found) 
    cout << "Lo sentimos, no haz ganado premio alguno, suerte para la proxima" << endl; 
+0

qwow,這就是我猜想的很多工作,但即時通訊仍然在第二學期,我不知道很多功能,但是謝謝,生病試圖瞭解你的代碼 –

+0

看看for循環的第二個例子。你應該知道什麼是for()循環,如果這是你的第二個學期。它應該很簡單,可以理解。如果你大聲說出那個循環中的內容,那應該是有道理的。 – PaulMcKenzie

+0

大聲笑當然,我知道什麼是循環,但我不知道一些其他功能,如sizeof或std :: fin,即時通訊閱讀它試圖瞭解他們,但多數民衆贊成爲什麼我的代碼是非常簡單的,因爲那就是這樣我可以做到這一點... 所以,你知道我如何解決我的問題在我自己的代碼? –

1

else僅指其正上方的if。比方說bolcliente==gans[10]。該程序檢查每個條件。當它到達bolcliente==gans[19]時,它發現否,它不相等,所以它運行cout<<"Lo sentimos, ... "

+0

哦,我明白了,但是當我在每一個後面添加一個else,如果它顯示許多「其他」,我有,在這種情況下,它打印19次cout <<「lo sentimos ...」,所以我該如何修復它? –

0

您需要在除第一個之外的每個if之前添加else