我是C新编码的新手,所以我确定这是一个基本问题。在我看来,这段代码应该读取一个输入,运行没有做任何事情的rcall(),并输出相同的值。这与int()值完美配合,但只要切换到double,输出就不会从-6158变化。如何解决这个逻辑错误?
double input, output, rcall(x);
int main(void){
scanf("%lf", &input); /*read the input*/
output=rcall( input); /*call the function*/
printf("%lf", output); /*print the output*/
}
double rcall(x){ /*this function does nothing*/
return x;
}
答案 0 :(得分:3)
这里的问题是您使用的是一个17岁的编译器,或者您当前的编译器配置错误,无法编译代码,就好像它已超过17年一样。
宣言double rcall(x);
在现代C中是无稽之谈。
但古代C允许草率声明,其中并未指定所有类型,甚至允许您调用没有声明的函数。然后,编译器将永远"帮助"假设那些未明确指定的类型都是int
。如果事实证明它们实际上并非如此,那么您的程序将会崩溃并烧毁。
这个纯粹的愚蠢系统在1999年从C语言中被删除,其中包括" C99"标准。在现代C中,您的声明应该是
double rcall (double x);
,定义应为
double rcall (double x)
{
return x;
}
如果您使用GCC,可以通过添加选项gcc -std=c11 -pedantic-errors
将其配置为根据现代标准C更正代码。然后你会得到原始代码的编译器错误。
答案 1 :(得分:0)
将x声明为双重类型
double rcall(double x)