'Why is this VLA (variable-length array) definition unreliable?

Why doesn't this code defining and using a VLA (variable-length array) work reliably?

#include <stdio.h>

int main(void)
{
    int n;
    double vla[n];

    if (scanf("%d", &n) != 1)
        return 1;
    for (int i = 0; i < n; i++)
    {
        if (scanf("%lf", &vla[i]) != 1)
            return 1;
    }
    for (int i = 0; i < n; i++)
        printf("[%d] = %.2f\n", i, vla[i]);
    return 0;
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source