【发布时间】:2020-01-31 23:13:52
【问题描述】:
我正在尝试从键盘扫描两个向量输入,然后创建一个函数来返回两个向量的标量积。但是,当我运行程序时,只要它在第一个 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
1.1
2.5
3.0
1.0
1.0
1.0
但是它只允许我输入直到 3.0,然后程序跳过第二个 for 循环到 print 语句。我怎样才能解决这个问题?
【问题讨论】:
-
for(int i = 0; i < 0; i++)-- 可能想要更改扫描输入以查找第一个向量的循环的限制。:) -
确实是被跳过的第一个循环;)
-
旁注 - 你想使用 'calloc' 而不是 malloc。这将使分配的内存归零,从而消除许多潜在的陷阱。常用的方法是 'double *v = (double *) calloc(n, sizeof(*v)) ;
标签: c arrays dynamic malloc allocation