#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void dossier (FILE*f,FILE*f2)
{
char k ;
k=fgetc(f) ;
fputc(k,f2) ;
printf("here%c",k) ;
while ( k!='\\')
{
k=fgetc(f);
fputc(k,f2);
}
}
void dossierp(FILE*f,FILE*f2)
{
char ch [1000] ;
do
{
dossier(f,f2) ;
}
while (fgets(ch,1000,f) !=NULL) ;
}
int main()
{
FILE*f=NULL ;
FILE*f2=NULL ;
f = fopen("text.txt","r+") ;
f2= fopen("t.txt","r+") ;
dossierp(f,f2);
fclose(f);
fclose(f2);
return 0;
}
文件 f
包含行。每一行都采用这种形式“(text)\text2)\...\
”。文件 f2
为空,函数 dossier
有效,但 dossierp
无效,因为它有一个无限循环。为什么?
最佳答案
我认为你的问题是你没有处理 dossier
中的 EOF
。因此,在某些情况下,无限循环将在 dossier
函数中,而不是在 dossierp
函数中。
请注意 getc
返回一个 int
,而不是一个 char
。 char
不能表示 EOF
。
关于c - 由于无限循环而卡在函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29235306/