2017-05-03 77 views
-6

剛剛寫了一個程序,但我不知道爲什麼所有For循環都不能在我的程序中工作。這裏是我的程序:爲什麼For循環在我的程序中不起作用?

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QtMath> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::on_pushButton_clicked() 
{ 
#define NMAX 41 
#define sum NMAX+2 
    double_t Xi = 0, Xf = 2; 
#define DELX (Xf - Xi)/(NMAX-1) 

    // Sample input data 
    quint32 Nmax = NMAX; 
    quint32 Uinf = 10; 
    quint32 KASE = 0; 
    double_t Cnu = 0.0002, X[NMAX] , S[sum] , Ue[NMAX] , Y[NMAX] , DELx = DELX , Cf=0 , Vsum=0 , F1=0 , F2=0 , Y2=1 , DUDS=0 , Const=0 , SThetha=0 , R0=0 , Thetha=0 , BLan=0 , H1=0 , S1=0 , Dels=0; 
    quint32 i=0; 
    QString text = "      Thwaites-Walz Method\n Input: Nmax , Cnu , Uinf , KASE\n"; 
    text.append("    "); 
    QString str = QVariant(Nmax).toString(); 
    text.append(str); 
    text.append(" "); 
    str = QVariant(Cnu).toString(); 
    text.append(str); 
    text.append(" "); 
    str = QVariant(Uinf).toString(); 
    text.append(str); 
    text.append(" "); 
    str = QVariant(KASE).toString(); 
    text.append(str); 
    text.append(" \n"); 

    for(i=0 ; i == Nmax ; i++) { 
     X[i] = Xi + (i - 1)*DELx; 
       if(KASE==0){Y[i]=0;} 
        if(X[i]<1){Ue[i]=10;} 
        else { 
        Ue[i] = 10.5-(X[i]/2); 
      } 
    } 
    i=0; 
    S[1]=0; 
    for(i=2 ; i == Nmax ; i++){ 
     S[1]=S[i-1]+(X[i]-X[i-1]); 
    } 
    i=0; 
    for(i=1 ; i==Nmax ; i++){ 
     if(KASE==2){ 
      Y2=Y[i]*Y[i]; 
     } 
     F2 = Y2*qPow(Ue[i],5); 
     if(i==1){ 
      goto chehel; 
     } 
     if(i==2 && 1 <= KASE){ 
      goto chehel; 
     } 
     Vsum = Vsum + (0.5*(F1+F2)*(S[i]-S[i-1])); 
     if(Ue[i]!= 0){ 
      DUDS = (Ue[i] - Ue[i-1])/(S[i] - S[i-1]); 
     } 
     Const = 0.45*Cnu/(F2*Ue[i]); 
     SThetha = Const*Vsum; 
     goto navad; 
     chehel: 
     DUDS = (Ue[2]-Ue[1])/S[2]; 
     SThetha = 0; 
     if(KASE==1){DUDS=2*Uinf/R0;} 
     if(KASE==1){SThetha=0.075*Cnu/DUDS;} 
     if(KASE==2){DUDS=3*Uinf/2/R0;} 
     if(KASE==2){SThetha=0.056*Cnu/DUDS;} 

     navad: 
     Thetha = qSqrt(SThetha); 
     BLan = SThetha*DUDS/Cnu; 
     if(BLan < 0){ 
      goto navadshesh; 
     } 
     H1 = 2.61-(3.75*BLan)+(5.24*BLan*BLan); 
     S1 = 0.22+(1.57*BLan)-(1.8*BLan*BLan); 

     goto navadhaft; 

     navadshesh: 
     H1 = 2.088+0.0731/(0.14+BLan); 
     S1 = 0.22+(1.402*BLan)+0.018*BLan/(0.107+BLan); 

     navadhaft: 
     Dels = Thetha*H1; 
     if(i > 1 && Ue[i] != 0){ 
      Cf = 2*Cnu*S1/(Ue[i]*Thetha); 
     } 
     if(BLan <= -0.09){ 
      text.append(".....Separation at or before S="); 
      str = QVariant(S[i]).toString(); 
      text.append(str); 
      text.append(" \n"); 
     } 
     str = QVariant(i).toString(); 
     text.append(str); 
     text.append(" "); 
     str = QVariant(S[i]).toString(); 
     text.append(str); 
     text.append(" "); 
     str = QVariant(Dels).toString(); 
     text.append(str); 
     text.append(" "); 
     str = QVariant(Thetha).toString(); 
     text.append(str); 
     text.append(" "); 
     str = QVariant(H1).toString(); 
     text.append(str); 
     text.append(" "); 
     str = QVariant(Cf).toString(); 
     text.append(str); 
     text.append(" \n"); 
     F1=F2; 

    } 



    ui->textEdit->setText(str); 
    ui->textEdit->setText("Walz program\n  N | S | DELTS | THETA | H | Cf |\n 564565"); 
    ui->textEdit->setText(text); 

} 

當我在Qt中調試它,debuger跳過循環。我不明白爲什麼?有什麼問題?這是當我運行該程序,然後點擊我得到的輸出「計算」:

image1

聽起來,程序工作只是直到第一個for循環。

+0

你能否正確格式化你的代碼?另外爲什麼你使用gotos? – Rafael

+0

你可以做一個更好的問題格式.... –

回答

2

C++不會「跳過」循環;你的邏輯有一個錯誤。

for(i=0 ; i == Nmax ; i++) 
//   ^^ 

循環的條件是「只要」謂詞,而不是「until」謂詞。

您的循環都不會被輸入,因爲沒有條件滿足。

所以:

for (i = 0; i < Nmax; i++) 

順便問一下,你的代碼是非常難以閱讀。丟失簡短的變量名和gotos,同時引入文檔評論和有意義的縮進。

+0

它現在的工作,謝謝。 – Roh

3

嘗試使用i < Nmax而不是i == Nmax

跳過你的for循環的原因是因爲i永遠不會等於Nmax。您使用i == Nmax作爲您在所有for循環中的檢查。

for(i=0 ; i == Nmax ; i++),你設置i等於0,然後檢查它是否等於Nmax(41),這是不正確的,所以它永遠不會進入循環,一次也沒有。

+0

現在正在工作,謝謝。 – Roh

相關問題