使用C语言中的scanf函数输入复数

3

我遇到了以下代码片段的问题:

int main()
{
    int n = 3;

    complex_t t[3];
    for(int i = 0; i < n; i++)
    {
        double x, y;
        printf("Enter complex number: ");
        scanf("%f %f", &x, &y);
        t[i].re = x;
        t[i].im = y;
    }
}

当我试图将 x 和 y 传递给程序时,值没有发生变化,并且仍为 0.00000。你能帮我吗?


5
打开编译器警告,会显示%f不是适用于double的正确转换说明符。请使用%lf。以后在提问调试问题时,请始终提供一个最小可复现示例([mre])。 - Eric Postpischil
1个回答

6
你声明了变量 xy 为双精度浮点型,但是后面使用的却是浮点数格式说明符 (%f)。因此,结果会将它们读入作为普通浮点数,然后将结果塞入双精度浮点型,导致在实际使用时出现意外值。
这里需要使用专门用于双精度浮点数的格式说明符 (%lf)。
scanf("%lf %lf", &x, &y);

更多关于不同格式说明符的信息,请参见格式说明符


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接