2017-05-03 3 views
-6

Ich habe gerade ein Programm geschrieben, aber ich weiß nicht, warum alle For-Schleifen in meinem Programm nicht funktionieren. Hier ist mein Programm:Warum For-Schleifen funktionieren nicht in meinem Programm?

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

} 

Wenn ich es in Qt debuggen, springt der debuger über die Schleifen. Ich verstehe nicht warum? was ist das Problem? dies ist die Ausgabe, die ich bekomme, wenn ich das Programm und klicken Sie auf „berechnen“ laufen:

image1

Es klingt, funktioniert das Programm nur bis zum ersten For-Schleife.

+0

Können Sie Ihren Code richtig formatieren? Warum benutzt du auch GOTOS? – Rafael

+0

Sie könnten ein besseres Frageformat haben ... –

Antwort

2

C++ "springt" nicht über Schleifen; Deine Logik hat einen Fehler.

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

Die Bedingung einer Schleife ist ein "so lang wie" Prädikat, kein "bis" Prädikat.

Keiner Ihrer Loops wird jemals eingegeben, da keine der Bedingungen jemals erfüllt wird. So

:

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

usw.

By the way, Ihr Code ist extrem schwer zu lesen. Verliere die kurzen Variablennamen und Gotos, während du dokumentierende Kommentare und bedeutungsvolle Einrückungen einführst.

+0

Es funktioniert jetzt, Danke. – Roh

3

Verwenden Sie i < Nmax statt i == Nmax.

Der Grund, warum es über Ihre for-Schleifen überspringen ist, weil i niemals Nmax entspricht. Sie verwenden i == Nmax als Check in all Ihren for-Schleifen.

In for(i=0 ; i == Nmax ; i++), sind Sie i gleich 0 gesetzt wird, und dann überprüft, ob es Nmax gleich (41), was nicht wahr ist, und so geht es nie in die Schleife, nicht einmal.

+0

Es funktioniert jetzt, Danke. – Roh

Verwandte Themen