将多个数组的元素添加到C

时间:2017-03-21 00:11:52

标签: c arrays array-initialization

我试图在将每个多项式乘以不同的常数后添加一些多项式。我已经能够设置数组并乘以常量,但是当我将不同数组(多项式)中的每个位置添加到一个新数组中但我得到错误时#34;变量大小的对象可能不会被初始化"并且程序无法编译。此外,无论数组的值或c的值是多少,乘法总是产生0。我不确定到底出了什么问题。

任何帮助将不胜感激

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{

    FILE *fp;
    fp = fopen("approximating the wronskian w/o wronskian.txt", "w");

    fprintf(fp, "|  c1  |  c2  |  c3  | value |\n");
    long int f1[3]= {1, 3, 4};
    long int f2[3]= {3, 4, 5};
    long int f3[3]= {3, 6, 8};


    for(int c1 = 0; c1 < 100; c1++)
    {
        for(int c2 = 0; c2 < 100; c2++)
        {
            for(int c3 = 0; c3 < 100; c3++)
            {
                for(int i = 0; i < 3; i++)
                {
                    f1[i] *= c1;
                    f2[i] *= c2;
                    f3[i] *= c3;

                    int w[i] = f1[i] + f2[i] + f3[i];

                    fprintf(fp, "|  %d  |  %d  |  %d  | %ld | %ld | %ld |\n", c1, c2, c3, f1[i], f2[i], f3[i]);
                }
            }
        }
    }

    fclose(fp);
    return 0;
}

2 个答案:

答案 0 :(得分:0)

编译器认为您正在尝试定义大小为“i”的int数组,此处为:

int w[i] = f1[i] + f2[i] + f3[i];

标识符“i”显然是动态值。 因此数组是动态调整大小的。 因此,它不能被初始化,编译器认为你正在尝试它。

我的猜测是你要用计算值填充数组。 该数组应该在函数之外定义(假设你想稍后使用这些值,这些代码在“main”中你似乎不想要;但这可能只是你发布的问题的最小代码)。你可能也想让它至少是long int,而不是int。 如果您以后不想使用这些值,只需将其打印到文件中,然后使用

long int w = ...

代替。

另外,在我看来

fprintf(fp, "|  %d  |  %d  |  %d  | %ld | %ld | %ld |\n", c1, c2, c3, f1[i], f2[i], f3[i]);
根据

与输出文件中的列标题不匹配

fprintf(fp, "|  c1  |  c2  |  c3  | value |\n");

这让我期待打印“w”而不是fn [i]。

答案 1 :(得分:0)

我想补充一点,因为在第一个循环中,f总是为0: c1 = 0,c2 = 0,c3 = 0。 因此,在所有后续的那些上,你只是乘以0 * x = 0。 可能最好从1开始并在循环之前处理0个案例。

但是即使在这种情况下,你很快就会耗尽整数空间并得到意想不到的值,所以在32位后我相信你会开始得到负数,最后当你用完所有64时它只会是0。

另外,我不确定我到底知道你要做什么。如果f应该保持不变,你需要一个新的变量来保存/打印乘法结果,否则f会一直在变化。