c - 在计算 c 中的标量积的程序中的第一个“for”循环之后,第二个“for”循环被忽略
问题描述
我正在尝试从键盘扫描两个向量输入,然后创建一个函数来返回两个向量的标量积。但是,当我运行程序时,只要它在第一个 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
循环有一个错字:for(int i = 0; i < 0; i++)
它立即停止。
它应该是:
for (int i = 0; i < n; i++) {
另请注意以下备注:
- 你应该检查的返回值
scanf()
- 你应该检查内存分配失败
- 您不需要将单个产品存储到本地数组中,这可能会很长并且会带来问题。
- 你应该释放分配的内存。
这是一个更正和简化的版本:
#include <stdio.h>
#include <stdlib.h>
double scalarproduct(double *v, double *w, int n) {
double scalprod = 0;
for (int i = 0; i < n; i++) {
scalprod += v[i] * w[i]
}
return scalprod;
}
int main() {
int n;
if (scanf("%d", &n) == 1 && n > 0) {
double *v = (double *)malloc(sizeof(double) * n);
double *w = (double *)malloc(sizeof(double) * n);
if (v == NULL || w == NULL) {
printf("cannot allocate memory\n");
return 1;
}
for (int i = 0; i < n; i++) {
if (scanf("%lf", &v[i]) != 1) {
printf("invalid input\n");
return 1;
}
}
for (int i = 0; i < n; i++) {
if (scanf("%lf", &w[i]) != 1) {
printf("invalid input\n");
return 1;
}
}
printf("Scalar product=%f\n", scalarproduct(v, w, n));
free(v);
free(w);
}
return 0;
}
推荐阅读
- java - Eclipse Hibernate.cfg.xml 正在从 MySQL 链接“sys”数据库
- angular - Workbox 预缓存 Angular 的延迟加载包
- javascript - 如何让我的不和谐机器人删除我的消息并对上面的消息做出反应?
- vb.net - 通过 EmbedBuilder 使用本地图像
- javascript - 函数表达式 - 以及函数语句 - 是否被推入调用堆栈?
- keras - 内核大小等于 1 的 Conv1D 做什么?
- arrays - 试图让一个 innerhtml 功能在反应待办事项列表中工作
- apache - Ubuntu上的Apache conf导致url重复而不是重定向
- flutter - Jitsi 在 Flutter 中相遇
- html - 我网站上的内容安全政策警告