gpt4 book ai didi

c - 用 for 填充二维数组时,C 中的无限循环

转载 作者:行者123 更新时间:2023-11-30 15:05:20 25 4
gpt4 key购买 nike

嘿,我需要一些帮助,我正在尝试制定一个行列式来乘以 2 个 vector ,这是我的代码:

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

void determinantAxB();

int main()
{

int i;
float a[2],b[2],abzlozky[2],c[2],d[2],cdzlozky[2];

printf("Zadaj suradnice bodu A");
for (i = 0; i < 3; i++)
{
if (i == 0)
{
printf("\nx=");
scanf("%f",&a[0]);
}
if (i == 1)
{
printf("y=");
scanf("%f",&a[1]);
}
if (i == 2)
{
printf("z=");
scanf("%f",&a[2]);
}
}

printf("\nZadaj suradnice bodu B");
for (i = 0; i < 3; i++)
{
if (i == 0)
{
printf("\nx=");
scanf("%f",&b[0]);
}
if (i == 1)
{
printf("y=");
scanf("%f",&b[1]);
}
if (i == 2)
{
printf("z=");
scanf("%f",&b[2]);
}
}

for (i = 0; i < 3; i++)
{
abzlozky[i] = b[i] - a[i];
}

//zadanie vektora CD

printf("\nZadaj suradnice bodu C");
for (i = 0; i < 3; i++)
{
if (i == 0)
{
printf("\nx=");
scanf("%f",&c[0]);
}
if (i == 1)
{
printf("y=");
scanf("%f",&c[1]);
}
if (i == 2)
{
printf("z=");
scanf("%f",&c[2]);
}
}

printf("\nZadaj suradnice bodu D");
for (i = 0; i < 3; i++)
{
if (i == 0)
{
printf("\nx=");
scanf("%f",&d[0]);
}
if (i == 1)
{
printf("y=");
scanf("%f",&d[1]);
}
if (i == 2)
{
printf("z=");
scanf("%f",&d[2]);
}
}

for (i = 0; i < 3; i++)
{
cdzlozky[i] = d[i] - c[i];
}

printf("Vektor AB= %6.3fi, %6.3fj, %6.3fk",abzlozky[0],abzlozky[1],abzlozky[2]);
printf("\nVektor CD= %6.3fi, %6.3fj, %6.3fk",cdzlozky[0],cdzlozky[1],cdzlozky[2]);

getch();

determinantAxB(abzlozky[2],cdzlozky[2]);


getch();
return 0;
}

void determinantAxB(float ab[2],float cd[2])
{
int j,k;
float vypocet[1][2];

for (j = 0; j < 2; j++)
{
for (k = 0; k < 3; k++)
{
if (j == 0) vypocet[j][k] = ab[k];
else vypocet[j][k] = cd[k];
printf("%f",vypocet[j][k]);
}
printf("\n");
}

}

我认为问题出在函数 determinantAxB 中,但我找不到错误。在主函数中,我确定了点 x、y、z 的坐标,然后用 B - A 来计算 vector i、j、k 的部分。在函数 determinantAxB 中,我尝试将此数组放入一个 2D 数组,但失败了。你能帮我吗?

最佳答案

您需要正确声明您的数组。

float a[2]; 声明一个包含两个元素的数组。 a[0]第一个 元素,a[1]第二个 元素。 a[2] 将是第三个​​元素,但只有两个。因此,尝试访问 a[3] 是越界错误和未定义的行为。

如果您想要一个包含三个元素的数组,请编写float a[3];

在一个不相关的说明中,没有理由编写一个循环来执行三件不相关的事情。而不是

for (i = 0; i < 3; i++)
{
if (i == 0)
{
printf("\nx=");
scanf("%f",&a[0]);
}
if (i == 1)
{
printf("y=");
scanf("%f",&a[1]);
}
if (i == 2)
{
printf("z=");
scanf("%f",&a[2]);
}
}

只写

// first thing
printf("\nx=");
scanf("%f",&a[0]);

// second thing
printf("y=");
scanf("%f",&a[1]);

// third thing
printf("z=");
scanf("%f",&a[2]);

另一方面,您可以将这些事情关联起来并编写循环:

const char* prompt="xyz";
for (i = 0; i < 3; i++) {
printf("%c=", prompt[i]);
scanf("%f",&a[i]);
}

关于c - 用 for 填充二维数组时,C 中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39932251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com