2016-03-12 39 views
0

我嘗試檢查我的參數是否排序。我有代碼,但它不起作用...你能告訴我我該怎麼修復?我認爲問題出現在第一個循環中,因爲結果可能在參數列表的末尾爲0。我不知道應該如何改變它,我試圖做到這一點:當atof(argv[i]) <= atof(argv[i + 1])不是真的,程序應該去下一個for循環...這是我第一個C++程序。我的參數是否已排序?

#include <iostream> 
#include <cstdlib> 
#include <cmath> 


using namespace std; 


int main(int argc, char *argv[]) 
{ 

    int result; 

    for (int i = 1; i < argc - 1; i++) { 
     if (atof(argv[i]) <= atof(argv[i + 1])) { 
      result = 0; 
     } 
    } 

    if (result == 0) { 
     cout << "Sorted!" << endl; 
     system("pause"); 
    } 


    for (int i = 1; i < argc - 1; i++) { 
     if (atof(argv[i]) >= atof(argv[i + 1])) { 
      result = 2; 
     } 
    } 

    if (result == 2) { 
     cout << "Sorted!" << endl; 
     system("pause"); 
    } 
    else { 
     cout << "Bad." << endl; 
     system("pause"); 
    } 

    system("pause"); 
    return 0; 
} 
+0

「atof(argv [i])<= atof(argv [i + 1])'不成立時,程序應該轉到下一個循環」,並且當條件爲真時它也轉到下一個for循環。 – MikeCAT

+0

請告訴我們所需的行爲。 – MikeCAT

+0

首先假定它們是排序的。所以初始化你的* result *變量。然後,你所要做的就是檢查它們是否被排序。 –

回答

0

你將不得不改變int result;int result = -1;初始化result

如果需要,用您想要的初始值替換-1

+0

是的,C++中的堆棧變量未初始化爲確定性狀態。你在分配時得到堆棧中的任何東西。我希望編譯器在該行上生成警告! – nicomp

+0

好吧,我將每個結果都更改爲int結果,但是當我選擇我喜歡的參數時:5 5 5 5 1 program return「Bad。」。 – Cleo

+0

@Cleo你的意思是你改變了局部變量的聲明和初始化的賦值,並停止更新'if'語句引用的'result'? – MikeCAT

0

再想想第一個循環。你所說的邏輯「如果任何數字少於下一個數字,則將result設置爲0」。因此,如果您有像5 3 4 2 1這樣的列表,那麼當比較3和4時,result將設置爲0.並且因爲剩餘數量正在減少,所以result的值在循環的其餘部分不會更改。

您可能需要考慮的一種解決方案是假設列表已排序,然後如果遇到未按排序順序的數字,請將結果設置爲-1並跳出循環。