【发布时间】:2021-11-05 17:17:25
【问题描述】:
我的 C 程序自行结束,我无法找出问题所在。我在停止的循环上方添加了一条注释。
我正在创建一个程序来匹配数组中的 dna 样本。 dna 样本是浮点数,我正在从文件中读取它们。
这是我正在读取的文件:
2.3 3.3 4.5 6.7 7.8 2.1 3.2 4.3 5.2 6.5
5
2.3 3.3 4.5 6.7 7.8 2.1 3.2 4.3 5.2 6.5
1.3 0.3 9.5 8.7 5.8 4.1 3.2 2.3 6.2 6.9
6.3 9.3 4.3 6.4 7.5 2.9 3.0 4.1 5.3 6.5
6.1 9.4 4.5 6.6 7.4 2.8 3.2 4.4 5.0 6.0
2.3 3.3 4.5 6.6 7.8 2.2 3.2 4.3 5.2 6.5
预期的输出是将打印所有值(犯罪样本为 5 行),第一行将被匹配,其余的则不会。然而,这是我的输出:
Reading chromosomes of the suspect.
2.3 3.3 4.5 6.7 7.8 2.1 3.2 4.3 5.2 6.5
Reading chromosomes of the criminals.
2.3 3.3 4.5 6.7 7.8 2.1 3.2 4.3 5.2 6.5
1.3 0.3 9.5 8.7 5.8 4.1 3.2 2.3 6.2
我尝试过调试它,有一次它在循环期间将我的 sizeR 变量随机分配为 10000 或其他值,我认为这是某个地方的问题,但现在不是我在努力理解为什么它仍在停止对我来说。
代码:
#include <stdio.h>
#include <stdbool.h>
FILE *fp;
int main(){
fp = fopen("dna_input.txt", "r");
int sizeR = 0, sizeC = 10; // declare size variables
float suspect[sizeC]; // declaring suspect array
float criminal[sizeR][sizeC]; // declaring criminal array
// reads 10 input values from first line of the file
printf("Reading chromosomes of the suspect. \n");
for (int i = 0; i < sizeC; i++){
fscanf(fp, " %f", &suspect[i]);
printf("%.1f ", suspect[i]);
}
printf("\n");
// reads integer from 2nd line of file for the amount of lines to read for next loop
fscanf(fp, " %d", &sizeR);
printf("Reading chromosomes of the criminals. \n");
// read 10 input values into 5 criminal arrays
// THIS LOOP IS WHERE MY PROGRAM IS STOPPING <---------------------------------------------
for (int i = 0; i < sizeR; i++){
for (int j = 0; j < sizeC; j++){
fscanf(fp, " %f", &criminal[i][j]);
printf("%.1f ", criminal[i][j]);
}
printf("\n");
}
// check for match
bool match = true;
for (int i = 0; i < sizeR; i++){
for (int j = 0; j < sizeC; j++){
if (suspect[j] != criminal[i][j]){
match = false;
}
}
// display matching result
if (match)
printf("The two profiles match! \n");
else
printf("The two profiles don't match! \n");
}
fclose(fp);
return 0;
}
【问题讨论】:
-
int sizeR = 0??两组嵌套循环都不会迭代,因此没有输出。 -
您正在使用
sizeR = 0创建“犯罪”数组,这肯定是错误的。设置大小变量后移动float criminal[sizeR][sizeC];行。 -
之后您还可以通过用户输入覆盖这些值。
-
你有
fscanf(fp, " %d", &sizeR);在数组被定义。我在第一次评论时没有注意到这个输入。 -
可变长度数组的维度在它定义的点是固定的(或暂时用维度定义),在这种情况下也是零长度。