我在这段代码中有 3 个函数。第一个 vector_add
,将两个 vector x 和 y 相加,并将它们放入另一个 vector z,这三个都由 N=3 个元素组成(在顶部定义)。第二个 vector_print
,使用 printf
循环遍历 z 中的元素,将第 i 个元素打印为数组。最后,主要功能定义了我的输入。我的目标是读取输出:z is 3 5 7
,即 x 和 y 的总和。但目前,它输出以下内容:
3.0000005.0000007.000000
z is 10
显然,这不是我想要的。但至少(不知何故)3、5 和 7 在那里!
专家们,请花点时间看看我的代码并提供建议以获得我想要的输出。我想以相同的通用格式保留这段代码,即 3 个独立的函数。
#include <stdio.h>
// vector length (fixed)
#define N (3)
// ---------------------------------------------------------------------
// vector_add
//
// returns the linear sum of the two vectors and puts them in another
// x: first vector
// y: second vector
// z: solution vector
double
vector_add(double x[N], double y[N], double z[N])
{
for (int i = 0; i < N; i++) {
z[i] += x[i] + y[i];
}
return *z;
}
// ---------------------------------------------------------------------
// vector_print
//
// prints the elements of an N array
int
vector_print(double z[N])
{
for (int i = 0; i < N; i++) {
printf("%f", z[i]);
}
printf("\n");
}
// ---------------------------------------------------------------------
// main
//
// test the vector_add() function
int
main(int argc, char **argv)
{
double x[N] = { 1., 2., 3. };
double y[N] = { 2., 3., 4. };
double z[N] = {0,0,0};
vector_add(x, y, z);
printf("z is %d", vector_print(z)); {
printf("\n");
}
return 0;
}
在这一行中:
printf("z is %d", vector_print(z));
首先评估printf()
的参数,这导致执行vector_print(z)
,输出3.0000005 .0000007.000000
.
然后,vector_print()
有效地返回 10
printf("z is %d", 10);
被执行,产生你观察到的输出。 10
是一些随机值,因为您的函数不会返回与其 promise 相反的值。
如果您希望函数 vector_print()
返回一个字符串,您有多种选择。最简单的可能是像这样返回一个指向静态字符数组的指针(未经测试的代码):
char *
vector_print(double z[N])
{
static char buf[100];
char *ptr = buf;
for (int i = 0; i < N; i++) {
ptr += snprintf(ptr, sizeof(buf)-(ptr-buf), "%f ", z[i]);
}
return ptr;
}
然后用
打印出来
printf("z is %s\n", vector_print(z));
那么它应该会如您所愿地工作。
我是一名优秀的程序员,十分优秀!