【发布时间】:2026-02-10 20:00:01
【问题描述】:
我正在开发一个程序,其中我不能使用全局变量等。这是一个关于生成 DNA 结构等的学校项目……我的问题是,我不知道如何传递变量在几个函数之间。在这里,下面的代码是我的一个函数,它读取一个文件并将 DNA 存储在数组“pole”中。每次从文件中读取有效字符时,它都会增加变量“i”。
int nacitanie(){
FILE *fp;
fp = fopen("DNAsekvencia.dat", "r");
if((fp = fopen("DNAsekvencia.dat", "r")) == NULL)
{
printf("Neotvoreny subor");
fflush(stdout);
}
int a, i=0, x=0;
char z, pole[1000];
//citanie DNA zo suboru
while((z = getc(fp)) != EOF)
{
pole[i] = z;
i++;
}
for(a=0; a<i; a++){
if(pole[a] == 'A' || pole[a] == 'C' || pole[a] == 'G' || pole[a] == 'T' || pole[a] == 'a' || pole[a] == 'c' || pole[a] == 'g' || pole[a] == 't'){
x++;
}else{
x--;
}
}
if(x==a){
printf("Sekvenciu sa podarilo nacitat\n");
fflush(stdout);
}else{
printf("Sekvencia nesplna podmienky\n");
fflush(stdout);
}
fclose(fp);
if(fclose(fp) == EOF)
printf("Subor sa nezatvoril");
return 0;
}
我的另一个函数是直方图,它需要使用前一个函数中的数组“pole”和“i”。 我该怎么做呢?我试图用指针来做,但没有用。有任何想法吗?我是新手。
int histogram(){
FILE *fp;
fp = fopen("DNAsekvencia.dat", "r");
if((fp = fopen("DNAsekvencia.dat", "r")) == NULL)
{
printf("Neotvoreny subor");
fflush(stdout);
}
int h, a, c, g, t;
for(h=0; h<i; h++){
if(pole[h] == 'A' || pole[h] == 'a'){
a++;
}else if(pole[h] == 'C' || pole[h] == 'c'){
c++;
}else if(pole[h] == 'G' || pole[h] == 'g'){
g++;
}else if(pole[h] == 'T' || pole[h] == 't'){
t++;
}
}
printf("A: %d\n", a);
fflush(stdout);
printf("C: %d\n", c);
fflush(stdout);
printf("G: %d\n", g);
fflush(stdout);
printf("T: %d\n", t);
fflush(stdout);
fclose(fp);
if(fclose(fp) == EOF)
printf("Subor sa nezatvoril");
return 0;
}
【问题讨论】:
-
代码打开文件两次,中间没有关闭:fp = fopen("DNAsekvencia.dat", "r");和以下行。建议删除此行。
-
代码正在关闭一个文件,没有干预打开:fclose(fp);和以下行。建议删除此行。
-
我不明白你到底是什么意思。我应该删除哪一行,为什么? ..请解释
标签: c arrays variables pointers