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