gpt4 book ai didi

即使满足条件,代码也不会进入 while 循环

转载 作者:太空宇宙 更新时间:2023-11-04 06:04:33 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
“while( !feof( file ) )” is always wrong

我有一个与 while 循环相关的奇怪问题。我有一个在进程父进程结束时调用的函数 (print_file()),它不接受继续执行的真实条件。这是我的简单多进程代码,如下所示。

#include <stdio.h>     /* basic I/O routines.   */
#include <stdlib.h>
#include <unistd.h> /* define fork(), etc. */
#include <sys/types.h> /* define pid_t, etc. */
#include <sys/wait.h> /* define wait(), etc. */
#include <signal.h> /* define signal(), etc. */
#include <pthread.h>
#include <time.h>
#include <ctype.h>

void print_file(char* [], char* []);
void child_process(int,int);
void parent_process();
int counter=0;

int main(int argc, char* argv[]) {

counter = atoi(argv[1]);
int i,k;
pid_t child_pid;
int child_status;
char* array[counter];
srand ( time(NULL) );
int temp;

for(i=0; i<counter; i++){
temp = rand()%4;
child_pid = fork();

switch(child_pid) {
case -1:
printf("Error occured with fork()\n");
exit(1);
case 0:
child_process(i,temp); /* Child Process */
exit(0);
}
}

wait(&child_status);
parent_process();
execl("/usr/bin/killall","killall","tail",(char *) 0);
return 0;
}

void child_process(int i,int temp){

FILE* fptr;
fptr = fopen("sample.txt","a+");
if( temp==0 ) {
fprintf(fptr,"A %d\n",i);
}
else if( temp==1 ) {
fprintf(fptr,"C %d\n",i);
}
else if( temp==2 ) {
fprintf(fptr,"G %d\n",i);
}
else if( temp==3 ) {
fprintf(fptr,"T %d\n",i);
}
fflush(fptr);
sleep(1);
fclose(fptr);
}

void parent_process(void){

FILE* fptr;
fptr = fopen("sample.txt","r");
char* str = (char*)malloc(1);
int temp,i,k;
char* array_opst[counter];
char* array[counter];

i=0;
while(!feof(fptr)){

fscanf(fptr,"%s%d",str,&temp);
if(feof(fptr))
break;

if(strcmp(str,"A")==0){
array[temp]="A";
array_opst[temp]="T";
printf("Array[%d] = %s\n",temp,array[temp]);
}
else if(strcmp(str,"C")==0){
array[temp]="C";
array_opst[temp]="G";
printf("Array[%d] = %s\n",temp,array[temp]);
}
else if(strcmp(str,"G")==0){
array[temp]="G";
array_opst[temp]="C";
printf("Array[%d] = %s\n",temp,array[temp]);
}
else if(strcmp(str,"T")==0){
array[temp]="T";
array_opst[temp]="A";
printf("Array[%d] = %s\n",temp,array[temp]);
}
i++;
}
fclose(fptr);
free(str);
print_file(array,array_opst);
}

void print_file(char* array[counter], char* array_opst[counter]) {

int j=0,i=1;

while(j<counter){
printf("%d", i);
i++;
j++;
if(i==10){
i=0;
}
}
return;
}

print_file 函数中,即使条件满足,它也不会进入 while 循环。但是每当我将 printf 放在 print_file 函数的第一行以检查它是否成功输入时,它就会打印出来。 (注意 counter 是一个全局变量)。是什么导致了这个问题?

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