使用for填充2D数组时C中的无限循环

时间:2016-10-08 12:17:33

标签: c math

嘿我需要一些帮助我试图对多种2矢量做出决定因素这是我的代码:

#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来计算向量i,j,k的部分。在函数determinantAxB中,我试图将这个数组放到一个2D数组中,但是我失败了。你可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您需要正确声明数组。

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]);
}