c - 由于无限循环而卡在函数中

标签 c

#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,而不是一个 charchar 不能表示 EOF

关于c - 由于无限循环而卡在函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29235306/

相关文章:

c - 在我退出之前处理 sigaction 时我的打印品没有出现

c - 为什么数值数组不以 '\0' 或空字符结尾?

c - 在c中输入 float 时如何进行错误检查?

c - 构建 OpenWrt 包的链接器错误

c - 除了原始机器指令之外,可执行文件中还有什么?

将递归函数更改为非递归函数

c - 通过调用另一个函数将指针移动到某个地址

c - opengl:关于 glutMainLoop() 的问题

c - c中的pow()函数使用什么算法

可以在没有数学支持的情况下编译 spidermonkey 吗?