c - 非常简单的 C 程序崩溃

标签 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);
}

最佳答案

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,它会将其值视为地址,这当然是无效地址。

关于c - 非常简单的 C 程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10630801/

相关文章:

c - char 数组上的 printf 问题

c++ - 打印指向成员字段的指针

python - 让你的 python 代码在所有计算机上执行

performance - CreateProcess 的快速替代方案

c - 内存问题和功能

c++ - 检查 SHBrowseForFolder 的权限类似于 GetSaveFileName,C++/Win32

c - C 规范中 float 的最大位数

windows-services - exe服务

c - 以表格格式打印 ASCII

c - 零长度数组发生段错误