C 如果在一个While循环中

C 如果在一个While循环中,c,C,我在使用此代码时遇到问题。 当我运行它时,它只输出while语句中的两行。 我正试图让它运行if语句,直到抵押离开 有人能看到我犯的错误吗? Idk如果这有帮助,但是如果我删除else语句,程序运行正常 #include <stdio.h> #include <stdlib.h> int main(){ float MortgageLeft, InterestRate, MonthlyPayment, MonIntRate, AmountOwed; in

我在使用此代码时遇到问题。 当我运行它时,它只输出while语句中的两行。 我正试图让它运行if语句,直到抵押离开 有人能看到我犯的错误吗? Idk如果这有帮助,但是如果我删除else语句,程序运行正常

#include <stdio.h>
#include <stdlib.h>

int main(){
    float MortgageLeft, InterestRate, MonthlyPayment, MonIntRate, AmountOwed;
    int Month=0;

    printf("What is the value left on the mortgage?\n");
    scanf("%f", &MortgageLeft);

    printf("What is the annual interest rate of the loan, in percent?\n");
    scanf("%f", &InterestRate);

    printf("What is the monthly payment?\n");
    scanf("%f", &MonthlyPayment);

    MonIntRate= (InterestRate/12)/100;

    printf("Month\t\t Payment\t Amount Owed\n");

    while (MortgageLeft>0)
    {
        if(MortgageLeft>MonthlyPayment)
        {
            MortgageLeft=(MortgageLeft*MonIntRate)+MortgageLeft;
            MortgageLeft=MortgageLeft-MonthlyPayment;    
            Month++;
            printf("%d\t\t %.2f\t\t %.2f\n", Month, MonthlyPayment, MortgageLeft);
        }
        else
            MortgageLeft=(MortgageLeft*MonIntRate)+MortgageLeft;
        Month++;
        printf("%d\t\t %.2f\t 0", Month, MortgageLeft);
        MortgageLeft=0;
    }
    return 0;
}
#包括
#包括
int main(){
浮动抵押贷款、利率、月付款、抵押贷款、未抵押贷款;
整月=0;
printf(“抵押贷款的剩余价值是多少?\n”);
scanf(“%f”,左(&f);
printf(“贷款的年利率是多少,以百分比表示?\n”);
scanf(“%f”和利率);
printf(“每月付款多少?\n”);
scanf(“%f”和每月付款);
MonIntRate=(利率/12)/100;
printf(“月付款\t\t欠款\n”);
而(左>0)
{
如果(MortgageLeft>MonthlyPayment)
{
MortgageLeft=(MortgageLeft*MonitorState)+MortgageLeft;
MortgageLeft=MortgageLeft月付款;
月份++;
printf(“%d\t\t%.2f\t\t%.2f\n”,月、月付款,抵押贷款余额);
}
其他的
MortgageLeft=(MortgageLeft*MonitorState)+MortgageLeft;
月份++;
printf(“%d\t\t%.2f\t 0”,月,左);
左=0;
}
返回0;
}

在else语句中,您有这一行
MortgageLeft=0。这就是为什么while循环不断退出的原因。此外,在您发布的代码中,似乎忽略了else语句周围的大括号。

似乎缺少一些括号

while (MortgageLeft>0)
    {
        if(MortgageLeft>MonthlyPayment)
        {
        MortgageLeft=(MortgageLeft*MonIntRate)+MortgageLeft;
        MortgageLeft=MortgageLeft-MonthlyPayment;    
        Month++;
        printf("%d\t\t %.2f\t\t %.2f\n", Month, MonthlyPayment, MortgageLeft);
        }
        else
        {
        MortgageLeft=(MortgageLeft*MonIntRate)+MortgageLeft;
        Month++;
        printf("%d\t\t %.2f\t 0", Month, MortgageLeft);
        MortgageLeft=0;
        }
   }
#包括
#包括
int main(){
浮动抵押贷款、利率、月付款、抵押贷款、未抵押贷款;
整月=0;
printf(“抵押贷款的剩余价值是多少?\n”);
scanf(“%f”,左(&f);
printf(“贷款的年利率是多少,以百分比表示?\n”);
scanf(“%f”和利率);
printf(“每月付款多少?\n”);
scanf(“%f”和每月付款);
MonIntRate=(利率/12)/100;
printf(“月付款\t\t欠款\n”);
而(左>0)
{
如果(MortgageLeft>MonthlyPayment){
MortgageLeft=(MortgageLeft*MonitorState)+MortgageLeft;
MortgageLeft=MortgageLeft月付款;
月份++;
printf(“%d\t\t%.2f\t\t%.2f\n”,月、月付款,抵押贷款余额);
}
其他的
{
MortgageLeft=(MortgageLeft*MonitorState)+MortgageLeft;
月份++;
printf(“%d\t\t%.2f\t 0”,月,左);
左=0;
}
}

一些合理的格式使问题变得明显:

while (MortgageLeft > 0)
{
  if (MortgageLeft > MonthlyPayment)
  {
    MortgageLeft = (MortgageLeft * MonIntRate) + MortgageLeft;
    MortgageLeft = MortgageLeft - MonthlyPayment;    
    Month++;
    printf("%d\t\t %.2f\t\t %.2f\n", Month, MonthlyPayment, MortgageLeft);
  }
  else 
    MortgageLeft = (MortgageLeft * MonIntRate) + MortgageLeft; // only this statement is 
                                                               // part of the else branch
  Month++;
  printf("%d\t\t %.2f\t 0", Month, MortgageLeft);
  MortgageLeft = 0;
}
else
分支中的所有语句都需要大括号:

while (MortgageLeft > 0)
{
  if (MortgageLeft > MonthlyPayment)
  {
    MortgageLeft = (MortgageLeft * MonIntRate) + MortgageLeft;
    MortgageLeft = MortgageLeft - MonthlyPayment;    
    Month++;
    printf("%d\t\t %.2f\t\t %.2f\n", Month, MonthlyPayment, MortgageLeft);
  }
  else 
  {
    MortgageLeft = (MortgageLeft * MonIntRate) + MortgageLeft; 
    Month++;
    printf("%d\t\t %.2f\t 0", Month, MortgageLeft);
    MortgageLeft=0;
  }
}
编译器并不关心你如何格式化你的代码,但是它可以在发现错误方面起到巨大的作用(无论是你自己的错误还是审查者的错误).空白是你的朋友;不要害怕在表达式之间和代码行之间留出一些喘息的空间。25年后,你的眼睛会为此感谢你。它确实让你和其他人更容易阅读,并帮助你更容易发现类似的问题

在IME中,将大括号直接与控件结构的开头对齐可以使这些结构更容易理解。2到4个缩进空间是清楚显示范围所需的全部空间

编辑

事实证明,其他人编辑了原始代码以使其更易于阅读

while (MortgageLeft > 0)
{
  if (MortgageLeft > MonthlyPayment)
  {
    MortgageLeft = (MortgageLeft * MonIntRate) + MortgageLeft;
    MortgageLeft = MortgageLeft - MonthlyPayment;    
    Month++;
    printf("%d\t\t %.2f\t\t %.2f\n", Month, MonthlyPayment, MortgageLeft);
  }
  else 
  {
    MortgageLeft = (MortgageLeft * MonIntRate) + MortgageLeft; 
    Month++;
    printf("%d\t\t %.2f\t 0", Month, MortgageLeft);
    MortgageLeft=0;
  }
}