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()。并且%d与整数一起使用。当你想使用时,double你需要使用 %lf;与 a 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);

如果您通过scanfjust 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 回答