0

私はスタック オーバーフローと C プログラミングにかなり慣れていません。

私は Kickstarter プロジェクトの平均計算機を作成しています。なぜ以下の方法が機能しないのか疑問に思っていました。平均ではありませんが、1 人の支援者を入力して毎日 10 ドルを誓約すると、支援者と資金が 2 倍になる理由は次のとおりです。

    #include <stdio.h>
    #include <conio.h>

    int main(void){

    int loopcount = 0;
    int backers = 0;
    int money = 0;
    int average = 0;

    int tbackers = 0;
    int tmoney = 0;

    while(loopcount<5){

       //Ask for # of backers and total money pledged.
       printf("Please Enter the number of backers today, then the total money pledged                                today:\n");
       scanf("%d\n%d", &backers, &money);

       //
       backers += backers;
       money += money;


       loopcount++;
        }
       //average = tmoney / tbackers;
       printf("There were %d backers and the total collected was $%d.\nSo the average amount pledged was  $%d", backers, money, average);

       getch();

}

しかし、以下はうまくいきます

#include <stdio.h>
#include <conio.h>

int main(void){

    int loopcount = 0;
    int backers = 0;
    int money = 0;
    int average = 0;

    int tbackers = 0;
    int tmoney = 0;

    while(loopcount<5){

       //Ask for # of backers and total money pledged.
       printf("Please Enter the number of backers today, then the total money pledged today:\n");
       scanf("%d\n%d", &backers, &money);

       //
       tbackers += backers;
       tmoney += money;


       loopcount++;
    }
       //average = tmoney / tbackers;
       printf("There were %d backers and the total collected was $%d.\nSo the average amount pledged was  $%d", tbackers, tmoney, average);

       getch();

}
4

2 に答える 2

7

最初のケースでは、各計算の後、新しいユーザー入力を取得したときに値をオーバーライドします。

scanf("%d\n%d", &backers, &money);

例えば:

line                  | backers    | money
----------------------+------------+------
user input 5 3        | 5          | 3
backers += backers    | 10         | 3
money += money        | 10         | 6
user input 8 6        | 8          | 6
backers += backers    | 16         | 6
money += money        | 16         | 12

2 番目の例では、値をオーバーライドせずに合計に追加します。

line                  | backers    | money    | tbackers   | tmoney    
----------------------+------------+----------+------------+---------
user input 5 3        | 5          | 3        | 0          | 0
tbackers += backers   | 5          | 3        | 5          | 0
tmoney += money       | 5          | 3        | 5          | 3
user input 8 6        | 8          | 6        | 5          | 3
tbackers += backers   | 8          | 6        | 13         | 3
tmoney += money       | 8          | 6        | 13         | 9
于 2012-05-18T07:18:30.083 に答える
1

「うまくいかない」とは正確にはどういう意味ですか?私はそれがうまくいかないとは想像できません。

money += moneymoneyvariable の内容にの値を追加しmoney、実質的にその値を 2 倍にします。

他の何かを達成したい場合は、2番目の例のように、何か他のものを表現する必要があります.合計の変数とユーザー入力の変数があります. それらを混同すると、データが破壊 (上書き) されてしまいます。

C99 を使用している場合、またはコンパイラで許可されている場合は、必要な場所の近くで変数を宣言できます。

[...]

while(loopcount<5){
   int money = 0;
   int average = 0;


   //Ask for # of backers and total money pledged.
   printf("Please Enter the number of backers today, then the total money pledged today:\n");
   scanf("%d\n%d", &backers, &money);

   //
   tbackers += backers;
   tmoney += money;

   loopcount++;
}
[...]

backersこれにより、ループの使用とmoney範囲が制限されるため、while漏れることはありません。

于 2012-05-18T07:18:57.330 に答える