比较换行没有正常工作

时间:2014-05-10 15:09:21

标签: c if-statement

我在C中有以下代码使用现有输入文件制作输入文件,但没有换行符:

int main()
{
    int T;
    char c;
    FILE *fi,*fo;
    fi=fopen("Square-practice.in","r");
    fo=fopen("Square-practice-a.in","w");

    fscanf(fi,"%d",&T);
    fprintf(fo,"%d",T);
    while(fscanf(fi,"%c",&c)==1){
        if(c=='\n') printf("qwert");
        else    fprintf(fo,"%c",c);
    }

    return 0;
}

没有编译错误。

但是,输出文件与输入文件完全相同,包含换行符。 “qwert”打印8次(与文件fi中的换行符数相同)。那么为什么“其他”不起作用呢?

编译器是MinGW。

fi,fo文件都是here

3 个答案:

答案 0 :(得分:1)

我认为你有'\ r \ n'而不是'\ n'。所以试试

int main()
{
    int T;
    char c;
    FILE *fi,*fo;
    fi=fopen("Square-practice.in","r");
    fo=fopen("Square-practice-a.in","w");

    fscanf(fi,"%d",&T);
    fprintf(fo,"%d",T);
    while(fscanf(fi,"%c",&c)==1){
        if(c=='\n' || c=='\r') printf("qwert");
        else    fprintf(fo,"%c",c);
    }

    return 0;
}

答案 1 :(得分:0)

您还可以使用fgetc()fputc()。在将每个字符传递到新文件之前,只需跳过任何\r\n

您的代码经过修改:

int main()
{

    int T;
    int iChr
    char c;
    FILE *fi,*fo;
    fi=fopen("Square-practice.in","r");
    fo=fopen("Square-practice-a.in","w");

    //fscanf(fi,"%d",&T);
    //fprintf(fo,"%d",T);
    iChr = fgetc(fi)
    while(iChr != EOF)
    {
        if((iChr =='\n')||(iChr =='\r')//skipping new file
        {
             printf("qwert");
        }
        else   fputc(fo);//no \n or \r, put in new file
    }
    fclose(fi);        
    fclose(fo);

    return 0;
}

答案 2 :(得分:-1)

我在我的Linux上运行此操作并且我正在获得我应该得到的内容:没有换行符号的同一文件和"qwert"打印到stdout。如果您正在获得其他内容,则必须是CR / LF翻译的问题。请尝试分别用"r""w"替换"rt""wt"


两条PS评论:

  1. 如果输入文件中的行终止符从CRLF转换为LF,则给定的程序在Linux上的"rt" 4.7.2上有效(有或没有gcc)。将文本文件从Windows移动到Linux并且可以使用fromdos工具完成时,这是合理的。

  2. C标准(ISO C99的第7.19.5.3节,第271页,或ISO C2011的第7.21.5.3节,第306页)确实不需要"t"用于文本文件(因此,符合要求的实现不需要实现它),但似乎某些实现的工作方式不同。