0

ユーザーからの入力を取得しようとした後、C実行可能ファイルがクラッシュするという単純な問題が発生しています。

プログラムのアイデアは、配列にデータを入力し、最終的にその配列にデータを生成することです。これまでのところ、exeがクラッシュした直後に、ユーザーからの入力を取得しようとしました。また、問題が何であるかをデバッグしようとしているときにコードを一時的に編集しましたが、成功しませんでした。私は何年もcに触れていませんでした、そして私が最後にいたときは非常に若く、かなりの初心者です。

誰かがそれがクラッシュする理由について考えられる解決策についてアドバイスできますか?

#include <stdio.h>
#include <stdbool.h>

double get_double(char prompt[50])
{
    double tempDouble = 0;
    printf("%s", prompt);
    scanf("%d", tempDouble);
    return tempDouble;
}

void populate_array(double *pData[])
{
    int i = 0;
    *pData[0] = get_double("Please Enter A Number : "); 
    //for(i = 0; i < sizeof(*pData); i++)
    //{
        //*pData[i] = get_double("Please Enter A Number : ");   
    //}
}

double get_sum(double data[10])
{
    int i = 0;
    double result = 0;
    for (i = 0; i < sizeof(data); i++)
    {
        result += data[i];
    }
    return result;
}

int main()
{
    //Variable Declarations
    bool running = true;
    bool playAgain = false;
    double numbers[10];
    double sum, min, max, var, dev;

    //Process
    populate_array(&numbers);
    sum = get_sum(numbers);
    printf("%d",sum);
}
4

3 に答える 3

4

あなたのコードには以下が含まれています:

scanf("%d", tempDouble);

&で使用するパラメータに追加する必要がありますscanf()。And%dは整数と共に使用されます。使用したい場合は、使用doubleする必要があります %lf。をfloat使用する場合は、 を使用します%f

于 2012-05-17T06:22:49.860 に答える
4

void populate_array(double *pData[])ポインターの配列を受け入れますが、配列だけを渡す場合は、次のようにする必要があります。

void populate_array(double pData[])
{
    int i = 0;
    pData[0] = get_double("Please Enter A Number : "); 
}

また、ダブルを読み取ると、次のようになります。

// as proposed by Jonathan, the format string should contain '%lf' for double, I overlooked it.
scanf("%lf", &tempDouble);

scanfだけを渡すとtempDouble、その値をアドレスとして扱いますが、これはもちろん無効なアドレスです。

于 2012-05-17T06:23:25.040 に答える
1
for (i = 0; i < sizeof(data); i++)

これは、配列の境界に達した後に繰り返されます。

for (i = 0; i < sizeof(data)/sizeof(double); i++)

これは機能するかもしれませんが、エレガントではありません

double get_sum(int numberOfElements, double data[10])
{
    int i = 0;
    double result = 0;
    for (i = 0; i < numberOfElements; i++)
    {
        result += data[i];
    }
        return result;
}

これはより良いアプローチです

sum = get_sum(10, numbers);

メイン関数では、次のように get_sum 関数を呼び出します

于 2012-05-17T07:06:01.717 に答える