c - 数组/指针和 scanf

标签 c arrays pointers dynamic initialization

我的代码有问题。 我正在创建一个动态数组并要求一些值。 但是当我在屏幕上打印它们时,数组似乎未初始化。

int main(void)
{
    int i, j;
    double *p;
    printf("How much numbers?\n");
    scanf("%d", &i);
    p = malloc (sizeof(double)*i);
    for(j = 0; j < i; j++)
    {
        printf("Set nr. %d :\n", j);
        scanf("%f", p+j);
    }
    for(j = 0; j < i; j++)
    {
        printf("Nr. %d = %f\n", j, *(p+j));
    }
}

我认为问题应该出在这一行,但我不明白为什么?

scanf("%f", p+j);

我也尝试过这个版本的代码:

scanf("%f", (p+j));
scanf("%f", &p[j]);

谢谢!

最佳答案

读取 double 的格式说明符错误:

    scanf("%f", p+j);

使用 %lf 读取 double :

    scanf("%lf", p+j);

您可能会感到困惑,因为 printf() 使用 %f 来打印 floatdouble 而 scanf() 需要不同的格式说明符。阅读这篇文章:

Why does scanf() need "%lf" for doubles, when printf() is okay with just "%f"?

关于c - 数组/指针和 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23898463/

相关文章:

c - 即使我初始化了所有内容,我也无法弄清楚这个段错误。几乎相同的代码在另一个程序中运行良好。

arrays - 写入 MultiString 注册键的 VB 脚本

c - C中结构体的内存分配

将堆栈转换为字符串

c++ - 复制结构的一部分

将类型结构转换为固定大小数组的内存位置

c - 是否可以使用 C 中的单个消息队列进行双向通信

c++ getline()在读取int数组的文件中使用时循环?

C语言。数组的声明,其大小由宏#define 给出

c - 使用灵活数组成员时正确的 malloc 大小