【问题标题】:Why For loops don't work in my program?为什么 For 循环在我的程序中不起作用?
【发布时间】:2017-10-01 16:41:22
【问题描述】:

刚写了一个程序,但我不知道为什么所有的 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 中调试它时,调试器会跳过循环。我不明白为什么?有什么问题?这是我运行程序并单击“计算”时得到的输出:

听起来,程序一直工作到第一个 For 循环。

【问题讨论】:

  • 您能否正确格式化您的代码?还有你为什么要使用 gotos?
  • 你可以做一个更好的问题格式......

标签: c++ qt loops for-loop


【解决方案1】:

尝试使用i &lt; Nmax 而不是i == Nmax

它跳过你的for循环的原因是i永远不等于Nmax。您正在使用 i == Nmax 作为您在所有 for 循环中的检查。

for(i=0 ; i == Nmax ; i++) 中,您将i 设置为0,然后检查它是否等于Nmax (41),这是不正确的,因此它永远不会进入循环,甚至一次也不会。

【讨论】:

    【解决方案2】:

    C++ 不会“跳过”循环;你的逻辑有问题。

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

    循环的条件是“只要”谓词,而不是“直到”谓词。

    您的任何循环都不会被输入,因为任何条件都不满足。

    所以:

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

    等等

    顺便说一句,您的代码非常难以阅读。去掉短变量名和 goto,同时引入文档化 cmets 和有意义的缩进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      相关资源
      最近更新 更多