gpt4 book ai didi

c - 'long' 之前的预期表达式

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:40 25 4
gpt4 key购买 nike

我是编程新手,我正在使用一本书来帮助我编写一些代码,这些代码将在用户输入“x”后求解 ln(1+x)。我的语法与书中示例中的语法完全相同,但我不断收到 error: expected expression before 'long' on line 28。第 28 行是读取 long double y 的行= 日志(1+(x));

#include <stdio.h>
#include <math.h>
#define LOG(X) _Generic((X),\
long double: log(1+(x))\
)

int main()
{

double x;

printf("Please enter a number from -1 to +1: ");
scanf("%f", &x);

long double y = LOG(1+(x));

printf("From C math library: ln(1+x) = %f\n", y);

}

最佳答案

首先,您的通用宏是为 long double 类型编写的。您提供了一个double 参数xlong doubledouble 是两种不同的类型。您没有为 double 定义通用分支,这意味着您的宏不会针对 double 参数进行编译。将 x 的类型更改为 long double 或使您的通用宏支持 double 参数。

此外,这是编写LOG 宏的一种非常奇怪的方式。为什么要在宏中明确使用 1 + (x) 作为 log 参数?如果明天您要计算 LOG(2 + y) 怎么办?您的宏仍然会坚持计算 log(1 + (x)),这根本没有任何意义。更明智的做法是将 X 传递给 log

#define LOG(X) _Generic((X),\
long double: log(X)\
)

其次,为了scanf double 值,您需要%lf 格式说明符。 %f 用于float。要printf long double 值,您需要%Lf 格式。

关于c - 'long' 之前的预期表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29178015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com