Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第二';对于';在第一个'之后忽略循环;对于';c语言中计算标量积的程序中的循环_C_Arrays_Dynamic_Malloc_Allocation - Fatal编程技术网

第二';对于';在第一个'之后忽略循环;对于';c语言中计算标量积的程序中的循环

第二';对于';在第一个'之后忽略循环;对于';c语言中计算标量积的程序中的循环,c,arrays,dynamic,malloc,allocation,C,Arrays,Dynamic,Malloc,Allocation,我试图扫描键盘上的两个向量输入,然后创建一个函数,返回两个向量的标量积。但是,当我运行程序时,只要它扫描第一个for循环中的第一个向量,程序就会结束,标量积为0。我不明白为什么它不让我扫描第二个向量。这是我的代码: #include <stdio.h> #include <stdlib.h> double scalarproduct(double *v, double *w, int n){ double vw[n]; for(int i = 0; i

我试图扫描键盘上的两个向量输入,然后创建一个函数,返回两个向量的标量积。但是,当我运行程序时,只要它扫描第一个for循环中的第一个向量,程序就会结束,标量积为0。我不明白为什么它不让我扫描第二个向量。这是我的代码:

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

double scalarproduct(double *v, double *w, int n){
    double vw[n];
    for(int i = 0; i < n; i++){
        vw[i] = (v[i] * w[i]); 
    }
    double scalprod = 0; 
    for(int i = 0; i < n; i++){
        scalprod += vw[i];
    }
    return scalprod;
}

int main(){
    int n;
    scanf("%d", &n);
    double *v; 
    v = (double *) malloc(sizeof(double) * n);
    double *w;
    w = (double *) malloc(sizeof(double) * n);
    for(int i = 0; i < 0; i++){
        scanf("%lf", &v[i]);       
    }  
    for (int i = 0; i < n; i++){
        scanf("%lf", &w[i]);
    }
    printf("Scalar product=%lf\n", scalarproduct(v,w,n));
    return 0; 
 }

但是它只允许我输入到3.0,然后程序将第二个for循环跳过到print语句。我怎样才能解决这个问题

for的第一个
循环有一个输入错误:
for(int i=0;i<0;i++)
它立即停止

应该是:

for (int i = 0; i < n; i++) {

第一个
for
循环有一个输入错误:
for(int i=0;i<0;i++)
它立即停止

应该是:

for (int i = 0; i < n; i++) {

for(int i=0;i<0;i++)
——可能需要更改扫描输入的第一个向量的循环限制<代码>:)
实际上,这是跳过的第一个循环;)旁注-您希望使用“calloc”而不是malloc。这将使分配的内存归零,消除许多潜在的陷阱。常用的方法是'double*v=(double*)calloc(n,sizeof(*v))
for(int i=0;i<0;i++)
--可能需要更改扫描输入的第一个向量的循环限制<代码>:)实际上,这是跳过的第一个循环;)旁注-您希望使用“calloc”而不是malloc。这将使分配的内存归零,消除许多潜在的陷阱。常用的方法是'double*v=(double*)calloc(n,sizeof(*v));