簡體   English   中英

不返回任何內容的程序

[英]Program that does not return anything

我正在使用C語言開發可以退還貸款的程序。 yearInt是年利息貸款Amt是每月貸款總額付款是每月付款數量付款是每月付款數量

由於某些原因,當我運行該程序時,即使輸入負數也沒有任何顯示。

反正有解決辦法嗎?

#include <stdio.h>
int main(void)
{
float yearInt = -1;
int loanAmt = -1;
float monthlyPay = -1;
int numberPay = -1;
int count = 0;

while (loanAmt<0)
{
    printf("Please enter valid loan value: \n");
    scanf("%f", &loanAmt);
}

while (yearInt<0)
{
    printf("Please enter valid yearly interest value: \n");
    scanf("%f", &yearInt)
}

while (monthlyPay<0)
{
    printf("Please enter valid monthly payment value: \n");
    scanf("%f", &monthlyPay);
}

while (numberPay<0)
{
    printf("Please enter valid number of monthly payments: \n");
    scanf("%f", &numberPay);
}

if(loanAmt>monthlyPay)
{
    while(count<numberPay)
    {
        loanAmt = loanAmt*(1 + (yearInt/12)) - monthlyPay;
        count += count+1;
    }
    printf("The amount of last payment is: %.2f\n", loanAmt);
else
    printf("The amount of last payment is: %.2f\n", loanAmt);
}
return 0;
}

您使用了錯誤的格式說明閱讀loanAmountnumberPay 代替"%f" ,使用"%d"

scanf("%d", &loanAmt);

scanf("%d", &numberPay);

另外,請始終檢查scanf的返回值,以確保它能夠將數據分配給所有變量。

更改循環:

while (loanAmt<0)
{
   printf("Please enter valid loan value: \n");
   scanf("%d", &loanAmt);
}

while (loanAmt<0)
{
   printf("Please enter valid loan value: \n");
   if ( scanf("%d", &loanAmt) != 1 )
   {
      // Discard the rest of the line.
      int c;
      while ( (c = fgetc(stdin)) = '\n' && c != EOF );
   }
}

最好將所有檢查放入函數中並從main調用該函數。

int readInt(char const* prompt)
{
   int val = -1;

   printf("%s\n", prompt);
   while ( scanf("%f", &val) != 1 || val < 0)
   {
      // Discard rest of the line.
      int c;
      while ( (c = fgetc(stdin)) = '\n' && c != EOF );

      // If EOF is reached, we have a problem.
      if ( c == EOF )
      {
         exit(0);
      }
      printf("%s\n", prompt);
   }

   return val;
}

然后,使用:

loanAmount = readInt("Please enter valid loan value: ");

加入類似的功能來讀取float S和調用它的讀取是類型的變量float

 scanf("%f", &loanAmt);         // loanAmt is int
 ... 
 scanf("%f", &numberPay);       //numberPay is int 

在兩個錯誤的參數中傳遞給%f ,因此導致UB。 使用%d說明符。

而在此}中缺少-

if(loanAmt>monthlyPay)
{
   while(count<numberPay)
   {
     loanAmt = loanAmt*(1 + (yearInt/12)) - monthlyPay;
     count += count+1;
   }
   printf("The amount of last payment is: %.2f\n", loanAmt);    //use %d 
     // ADD '}' here 
else    // ADD '{' here 
   printf("The amount of last payment is: %.2f\n", loanAmt);    //use %d 
}

}之前else {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM