Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 程序的意外终止_C - Fatal编程技术网

C 程序的意外终止

C 程序的意外终止,c,C,我是C语言的新手,正在使用scanf函数。我要求用户输入的数字是一个名为myNumber的长整数。但是,当我输入值时,程序给出“分段错误:11” 我想知道我做错了什么 long double ObtainNumber (/* you have no type name here */myNumber) 除非指定类型为myNumber,否则其类型假定为int。当您为%lf说明符将指向int的指针传递到scanf时,会得到未定义的行为 您需要将myNumber的类型指定为double long d

我是C语言的新手,正在使用scanf函数。我要求用户输入的数字是一个名为myNumber的长整数。但是,当我输入值时,程序给出“分段错误:11”

我想知道我做错了什么

long double ObtainNumber (/* you have no type name here */myNumber)
除非指定类型为
myNumber
,否则其类型假定为
int
。当您为
%lf
说明符将指向
int
的指针传递到
scanf
时,会得到未定义的行为

您需要将
myNumber
的类型指定为
double

long double ObtainNumber (double myNumber)
请注意,这不会让您将
myNumber
的值传递回调用者:该值将在按值传递的参数中设置;一旦函数退出,它将被丢弃

如果需要从函数返回值,则需要传递一个指向
myNumber
的指针:

long double ObtainNumber (double *myNumberPtr)
除非指定类型为
myNumber
,否则其类型假定为
int
。当您为
%lf
说明符将指向
int
的指针传递到
scanf
时,会得到未定义的行为

您需要将
myNumber
的类型指定为
double

long double ObtainNumber (double myNumber)
请注意,这不会让您将
myNumber
的值传递回调用者:该值将在按值传递的参数中设置;一旦函数退出,它将被丢弃

如果需要从函数返回值,则需要传递一个指向
myNumber
的指针:

long double ObtainNumber (double *myNumberPtr)

您没有向函数声明
myNumber
参数的类型,因此假定它是
int
。然后,您继续将它传递给一个
scanf
,它期望它是一个
double
,并且各种各样的坏事最终都会发生

在本例中,不清楚为什么
myNumber
是一个参数——它肯定根本不影响函数的功能。您可能只是想将其声明为局部变量:

long double ObtainNumber(void)
{
    long double myNumber;
    scanf("%lf", &myNumber);
    ...

顺便说一句,
long double
不太可能是您真正想要的类型。这是一种时髦的扩展精度类型,它的大小可以根据您使用的体系结构、编译器和系统而有所不同。()很少使用,也没有必要
double
更容易键入,并且更可能按照您期望的方式进行操作。

您没有向函数声明
myNumber
参数的类型,因此假定它是
int
。然后,您继续将它传递给一个
scanf
,它期望它是一个
double
,并且各种各样的坏事最终都会发生

在本例中,不清楚为什么
myNumber
是一个参数——它肯定根本不影响函数的功能。您可能只是想将其声明为局部变量:

long double ObtainNumber(void)
{
    long double myNumber;
    scanf("%lf", &myNumber);
    ...

顺便说一句,
long double
不太可能是您真正想要的类型。这是一种时髦的扩展精度类型,它的大小可以根据您使用的体系结构、编译器和系统而有所不同。()很少使用,也没有必要
double
更容易键入,也更容易按照您期望的方式进行操作。

我们需要知道myNumber的类型,以及代码的其余部分,至少是在该修补程序之后运行的部分。myNumber是如何定义的?我们需要知道myNumber的类型,以及代码的其余部分,至少在此修补程序之后运行的。myNumber是如何定义的?