非常简单的C程序崩溃

时间:2012-05-17 06:20:14

标签: c printf exe scanf procedure

我遇到一个简单的问题,我的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);
}

3 个答案:

答案 0 :(得分:4)

您的代码包含:

scanf("%d", tempDouble);

您需要将&添加到scanf()中使用的参数中。 %d与整数一起使用。如果您想使用double,则需要使用%lf;使用float,您可以使用%f

答案 1 :(得分: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,则会将其值视为地址,当然这是无效地址。

答案 2 :(得分: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);

在main函数中调用get_sum函数,如下所示