我正在尝试编写一小段代码,将两个文件中的行交替合并,并将结果写入用户指定的另一个文件中。

除此之外,此刻它似乎忽略了'\ 0'字符并一次复制整个文件,而不是一次复制一行。

#include <stdio.h>
#include <stdbool.h>

int main (void)
{

    char in1Name[64], in2Name[64], outName[64];
    FILE *in1, *in2, *out;

    printf("Enter the name of the first file to be copied: ");
    scanf("%63s", in1Name);

    printf("Enter the name of the second file to be copied: ");
    scanf("%63s", in2Name);

    printf("Enter the name of the output file: ");
    scanf("%63s", outName);


    // Open all files for reading or writing
    if ( (in1 = fopen(in1Name, "r")) == NULL )
    {
        printf("Error reading %s", in1Name);
        return 1;
    }

    if ( (in2 = fopen(in2Name, "r")) == NULL )
    {
        printf("Error reading %s", in2Name);
        return 2;
    }

    if ( (out = fopen(outName, "w")) == NULL )
    {
        printf("Error writing to %s", outName);
        return 3;
    }


    // Copy alternative lines to outFile
    bool notFinished1 = true, notFinished2 = true;
    int c1, c2;
    while ( (notFinished1) || (notFinished2) )
    {

        while ( ((c1 = getc(in1)) != '\0') && (notFinished1) )
        {
            if (c1 == EOF)
            {
                notFinished1 = false;
            }
            else
            {
                putc(c1, out);
            }
        }

        while ( ((c2 = getc(in2)) != '\0') && (notFinished2) )
        {
            if (c2 == EOF)
            {
                notFinished2 = false;
            }
            else
            {
                putc(c2, out);
            }
        }

    }


    // Close files and finish
    fclose(in1);
    fclose(in2);
    fclose(out);

    printf("Successfully copied to %s.\n", outName);

    return 0;

}

最佳答案

换行符是'\n',而不是'\0'。后者是一个零值(空)字节;在C中,它用于指示字符串的结尾,但文本文件不包含它。

关于c - C-读取换行符的结尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9346638/

10-11 21:13