我遇到一个简单的问题,我的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);
}
答案 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函数,如下所示