当尝试迭代多维数组以使用计算的 table 值填充数组的其余部分时,C 程序未按预期运行
C program not functioning as expected when trying to iterate over multidimensional array to fill the rest of the array with calculated table values
在下面的代码中,所有变量(startV
、endV
、volumeStep
、tempStep
)都是用户在代码。变量 rowNum
是一个整数。该程序似乎在到达 Table[j][i] = (nR*(Table[i][0]))/(Table[0][j]);
时中断并尝试使用数组中已有的行和列来计算和分配值。我不知道出了什么问题。提前感谢您的帮助:)哦,是的,数组 Table 被初始化为 Table[rowNum][9];
for (int i = 1;i<=8;i++) //Fills the Volume COLUMNS axis of the table [0][v]
{
Table[0][i] = startV + (volumeStep*(i-1));
}
for (int i = 1;i<=rowNum;i++) //Fills the Temperature ROWS axis of the table [t][0]
{
Table[i][0] = startT + (tempStep*(i-1));
}
nR = moles*8.314;
for (int i = 1; i<=rowNum;i++)
{
for (int j = 1; j<=8; j++)
{
Table[j][i] = (nR*(Table[i][0]))/(Table[0][j]);
printf("%lf", Table[i][j]);
}
}
c 中的数组索引从 0
到 N - 1
,例如
for (int i = 1 ; i <= rowNum ; i++)
应该是
for (int i = 0 ; i < rowNum ; i++)
因此,当您达到 i == rowNum
时,您的程序会调用未定义的行为
或者您应该将 Table
声明为
double Table[rowNum + 1][9];
Oh yeah, and the array Table is initialized as Table[rowNum][9];
这意味着:
Table[j][i] = (nR*(Table[i][0]))/(Table[0][j]);
错了。您的意思是 Table[j][i]
,因为您将 i
从 1
循环到 rowNum
,将 j
从 1
循环到 8
。
此外,如果您的第一个数组有 rowNum
个元素,您只能循环到 rowNum - 1
个(包括最后一个元素)。
在下面的代码中,所有变量(startV
、endV
、volumeStep
、tempStep
)都是用户在代码。变量 rowNum
是一个整数。该程序似乎在到达 Table[j][i] = (nR*(Table[i][0]))/(Table[0][j]);
时中断并尝试使用数组中已有的行和列来计算和分配值。我不知道出了什么问题。提前感谢您的帮助:)哦,是的,数组 Table 被初始化为 Table[rowNum][9];
for (int i = 1;i<=8;i++) //Fills the Volume COLUMNS axis of the table [0][v]
{
Table[0][i] = startV + (volumeStep*(i-1));
}
for (int i = 1;i<=rowNum;i++) //Fills the Temperature ROWS axis of the table [t][0]
{
Table[i][0] = startT + (tempStep*(i-1));
}
nR = moles*8.314;
for (int i = 1; i<=rowNum;i++)
{
for (int j = 1; j<=8; j++)
{
Table[j][i] = (nR*(Table[i][0]))/(Table[0][j]);
printf("%lf", Table[i][j]);
}
}
c 中的数组索引从 0
到 N - 1
,例如
for (int i = 1 ; i <= rowNum ; i++)
应该是
for (int i = 0 ; i < rowNum ; i++)
因此,当您达到 i == rowNum
时,您的程序会调用未定义的行为
或者您应该将 Table
声明为
double Table[rowNum + 1][9];
Oh yeah, and the array Table is initialized as Table[rowNum][9];
这意味着:
Table[j][i] = (nR*(Table[i][0]))/(Table[0][j]);
错了。您的意思是 Table[j][i]
,因为您将 i
从 1
循环到 rowNum
,将 j
从 1
循环到 8
。
此外,如果您的第一个数组有 rowNum
个元素,您只能循环到 rowNum - 1
个(包括最后一个元素)。