2016-10-26 13 views
-8

私は数日間自分のコードに何が間違っているか把握しようとしています。私はそれを見つけるように見えない。文が私をかなり混乱させるなら、私はそれらを混乱させたと思っていますが、まだ分かりません。私が知っているのは、私は大慌てて、私が得ることができるすべての助けが大好きだということです。 GCCを使用してプログラムをコンパイルする私のコードがうまくいかない理由を理解できません

#include <stdio.h> 

// function main begins program execution 
int main(void) 
{ 
    int numberOfDays = 0; 
    float numberOfMiles = 0; 
    float milesCharge = 0; 
    float milesTotal = 0; 
    float total = 0; 
    float subtotal = 0; 
    float tax = 0; 

    do { 
     printf("%s", "How many days was car rented?\t"); 
     scanf("%d", &numberOfDays); 
    } while (numberOfDays < 1); 

    do { 
     printf("%s", "How many miles were driven?\t"); 
     scanf("%d", &numberOfMiles); 
    } while (numberOfMiles > 1); 

    if (numberOfMiles > 1 || numberOfMiles < 200) { 
     milesTotal = numberOfMiles * .40; 
    } else { 
     milesTotal = numberOfMiles * .35; 
    } 

    subtotal = milesTotal + numberOfDays * 15; 
    tax = subtotal * .06; 
    total = tax + subtotal; 

    printf("\nSubtotal:\t\t\t$%.2f\n", subtotal); 
    printf("Tax Amount:\t\t\t$%.2f\n", tax); 
    printf("Total:\t\t\t\t$%.2f\n", total); 
    printf("\n"); 
} 
+2

あなたが期待している入出力を提供してください。今まであなたのプログラムをデバッグしようとしましたか? – galfisher

+1

私はCのコーダーではありませんが、numberofdaysは決して増加しないので、(numberOfDays <1)は永遠に実行されるようです。無限ループ。 – rob

+0

ようこそStackOverflow!私たちは助けてくれることを望んでいますが、問題がどこにあるのか、問題が何であるのか、そしてプログラムからどのようなことが分かるのか教えてください。下降票があなたに届かないようにしてください。私たちがあなたを助けるために必要なものを私たちに提供していないので、彼らは起こっているだけです。 :) – SnakeDoc

答えて

3

numberOfMiles場合は、型でなければなりません。

-

あなたが無限ループを回避したい場合、ところで

} while (numberOfMiles < 1); 

によって為替

} while (numberOfMiles > 1); 

。なぜマイルよりも短い距離を許可しないのですか?

by

} while (numberOfMiles < 0); 

具体的な回答については、より正確な回答が必要です。

1

は、次の警告を与える:

t.c: In function ‘main’: 
t.c:21:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘float *’ [-Wformat=] 
    scanf("%d", &numberOfMiles); 
    ^

問題があり、int型の変数のために使用されるバイナリフォーマットを使用してnumberOfMilesの場所で入力された番号を保存することのscanf()ただし、numberOfMilesはfloat変数です。浮動小数点として解釈される整数ビットパターンは、おそらく非常に異なる意味を持ち、不正な浮動小数点値でもあります。

numberOfMilesのタイプをfloatからintに変更すると、この問題が修正されます。

また、条件をwhile (numberOfMiles < 1)に変更する必要があります。

私はこれが役に立ちます。あなたは

scanf("%f", &numberOfMiles); 

で次の行

scanf("%d", &numberOfMiles); 

を交換する必要があるか、intにタイプを設定することができますfloat 、マリオ

関連する問題