2012-03-10 40 views
-4

嗨,我試圖解決Spotify網站上的難題 - http://www.spotify.com/uk/jobs/tech/best-before/C++幫助試圖解決的難題上Spotify的

我在C++編寫,並即時得到一些非常討厭的結果。我有一個叫做pause的int,它是無用的,什麼都不做,但是當我刪除它時,我的程序似乎返回了錯誤的結果。

#include <iostream> 
    #include <string> 
    #include <sstream> 

    using namespace std; 
    int Year; 
    int Month; 
    int Day; 

    int pause; // <--- My useless INT which when Deleted my code returns wrong output 

    stringstream ss; 
    string input; 
    string in; 
    bool loop=true; 
    int date[3]; 
    bool DateFound=false; 

      void Check_date(); 
      void Check_date() 
     { 

if(DateFound==false) 
{ 
//Check if valid Year 
if (date[1]<2999 && date[1]>0 && date[2]>0 && date[3]>0) 
{ //check months & days are valid 
    if(date[2]==1 || date[2]==3 || date[2]==5 || date[2]==7 || date[2]==8 || date[2]==10 || date[2]==12){if(date[3]<=31){DateFound=true;}} 
    if(date[2]==4 || date[2]==6 || date[2]==9 || date[2]==11){if(date[3]<=30){DateFound=true;}} 
    //Check For Leap Year 
    if (date[2]==2) 
    { if(date[3]<28)DateFound=true; 
     if(date[1]%4==0 && date[3]<=29)DateFound=true; 
     if(date[1]%100==0 && date[1]%400!=0 && date[3]>28)DateFound=false; 
    } 

if(DateFound==true){Year=date[1]; Month=date[2]; Day=date[3];} 
} 
} 

     } 

     void SwitchDate(){int temp; temp=date[2]; date[2]=date[3]; date[3]=temp; 

    Check_date();}; 
    void ShiftDate(int places) 
    { if(places==1) 
     { 
     int temp; temp=date[3]; date[3]=date[2]; date[2]=temp; temp=date[1]; date[1]=date[2]; date[2]=temp; Check_date(); 
     } 
     if(places==2) 
     { 
     int temp; temp=date[1]; date[1]=date[2]; date[2]=temp; temp=date[2]; date[2]=date[3]; date[3]=temp; Check_date(); 
    } 
}; 

int main() 
{ 

while(loop==true) 
{ 
cin >> input; 
for (int x=0, y=1; y<4; y++, x++) 
    { 
     while (input[x] !='/' && x !=input.length()) ss<<input[x++]; 
     ss>> date[y]; 
     ss.clear(); 
    } 

//order small medium large 

for (int x=3, temp; x!=0; x--) 
{ 
    if (date[x] < date[x-1]) 
     { temp=date[x-1]; 
      date[x-1]=date[x]; 
      date[x]=temp; 
     } 
    if (x==1 && (date[2] > date[3])) 
      { 
       temp=date[3]; 
       date[3]=date[2]; 
       date[2]=temp; 
      } 

} 

Check_date();//return true 
SwitchDate(); 
ShiftDate(1); 
SwitchDate(); 
ShiftDate(2); 
SwitchDate(); 

//PRINT 

cout <<Year; cout<< endl; 
cout <<Month; cout<< endl; 
cout <<Day; cout<< endl; 

//   13/12/5 

cout <<"Again? 'Y' or 'N' \n"; 
cin >>in; 
if(in=="y" || in=="Y"){loop=true;} 
if(in=="n" || in=="N"){loop=false;} 
} 

return 0; 
} 
+3

我在這段時間看到過一些格式不正確的代碼,但這是最糟糕的!對不起......我*不能*閱讀這個來看問題在哪裏。 – Johnsyweb 2012-03-10 03:00:06

+0

最適合http://codegolf.stackexchange.com/。 – jweyrich 2012-03-10 03:01:39

回答

3
int date[3]; 

您已經聲明date爲三個int秒的arary。這三個int被稱爲:date[0],date[1]date[2]

然而,在這一行

if (date[1]<2999 && date[1]>0 && date[2]>0 && date[3]>0) 

你是指什麼叫date[3],它不存在。

在C和C++中,數組是,從零開始。也就是說,第一個元素由0索引。如果陣列的大小爲N,則最終元素由N-1索引。

+0

OP在說什麼「int pause」?有什麼想法嗎? – noMAD 2012-03-10 03:01:25

+0

謝謝你解決了我的問題!我想從1-3開始日期數組的索引,而不是0-2,但日期[3]不存在。任何想法爲什麼它在我之前聲明瞭一個int時工作?再次感謝 – Scott 2012-03-10 14:21:23