0

それで、私は iTunes U で Harvard CS50 コースに取り組んでいて、ちょっとした問題に遭遇しました。コードが実行されてから停止します。コードが問題を引き起こしている問題について説明します。

// Program calculates the amount of change you can give with the least amount of coins.

 #include <stdio.h>
 #include <cs50.h>
 #include <math.h>

int
main(void)
{

    float change = 0, inputflag = 1;
    int changeint = 0;
    int quarter = 25, dime = 10, nickel = 5, penny = 1; // Coins and values
    int qc = 0, dc = 0, nc = 0, pc = 0; // Coin value change (Qc = Quarter Change)

// Prompts user for input and validates. 

    while (inputflag == 1)
     {
        printf("How much change? ");
        change = GetFloat();

        if (change == 0)
        {
            printf("You have no change!\n");
            inputflag = 0;
        }
        else if (change > 0)
        {
            printf("%.2f\n", change);
            inputflag = 0;
        }
        else
        {
            printf("Please enter a non-negative number! \n");
        }
     } 

プログラムはここで停止します。コードを実行し、許容値を入力すると、プログラムの実行が停止します。下の部分には移動しません。

最後の 1 時間かけてこれを調べましたが、何がプログラムの実行を妨げているのかまだわかりません。inputflag 値が 0 に設定されるため、最初の while ループが中断され、if (change != 0) の下に移動する必要がありますが、そうではありません...アドバイスをいただければ幸いです。

    if (change != 0) // If the change is zero, this section is skipped
        {
            changeint = round(100 * change);
            printf("%d", changeint);
        }

      // The following four sections subtract coin amount, compare it, and add 1 to count.  
          while (changeint >= quarter);    
          {   
               changeint = changeint - quarter;
               qc = qc + 1;
          }

          while (changeint >= dime);
          {
               changeint = changeint - dime;
               dc = dc + 1;
          }

          while (changeint >= nickel);
          {
               changeint = changeint - nickel;
               nc = nc + 1;
          }

          while (changeint >= penny);
          {
               changeint = changeint - penny;
               pc = pc + 1;
          }

//Prints output

          printf("You owe a total of %d coins!", qc + dc + nc + pc);

}
4

1 に答える 1

6

while各ステートメントの最初の行にあるセミコロンが原因です。避けられない無限ループを避けるために、それらを削除する必要があります。

      while (changeint >= quarter) 
      {   
           changeint = changeint - quarter;
           qc = qc + 1;
      }

      while (changeint >= dime)
      {
           changeint = changeint - dime;
           dc = dc + 1;
      }

      while (changeint >= nickel)
      {
           changeint = changeint - nickel;
           nc = nc + 1;
      }

      while (changeint >= penny)
      {
           changeint = changeint - penny;
           pc = pc + 1;
      }

はい、最も単純な問題でさえ検出されない可能性があり、セミコロンを含む for/while ステートメントはその 1 つです (これは意図されたものです)。

于 2012-08-07T00:33:49.040 に答える