if else条件的错误

时间:2014-04-02 01:29:10

标签: c++ arrays if-statement

#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");
}

嗨,你能帮我解决一下这个问题吗?如你所见,这个程序是西班牙语,它要求用户输入他的乐透票号,如果他是胜利者(阵列gans中的任何数字),那么打印一条消息,如果他没有赢得消息应该打印出另一条消息,确实如此,但如果他是胜利者,即使他赢了也会打印其他条件,你能帮我解决这个错误吗?

3 个答案:

答案 0 :(得分:1)

else仅指其正上方的if。让我们说bolcliente==gans[10]。该程序检查每个条件。当它到达bolcliente==gans[19]时,它发现不,它不相等,因此它运行cout<<"Lo sentimos, ... "

答案 1 :(得分:0)

除了第一个else之外,您需要在if之前添加{{1}}。

答案 2 :(得分: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;