繁体   English   中英

从两个不同的文件读取并打印到第三个

[英]Reading from two different files and printing to third one

我需要从2个不同的文件中读取并打印到第三个文件,首先我从file1读取并将第一个单词保存到文件第三个,然后从file2读取并将第一个单词从这里保存到第三个文件作为第二个单词,依此类推...... file1中的单词在单词的开头有“+”,而file2的单词有“ - ”。 我的问题是代码没有停止并仍在工作,并且第三个文件“。”(很多点)。 谢谢

#include<stdio.h>
#include<stdlib.h>

int main(){
    FILE *first, *second, *third;
    char ch[256],ch1[256],ch2;
    int i=1,count;
    char space = ' ';
    char minus = '-';
    char plus = '+';

    first=fopen("prvy.txt", "r");
    second=fopen("druhy.txt", "r");
    third=fopen("treti.txt", "w");

        if(first==NULL || second==NULL || third==NULL)
        {
        printf("error");
        exit(1);
        }

        while (fscanf(first, "%255s", ch) == 1)
        {
            count++;
        }

        while (fscanf(second, "%255s", ch) == 1)
        {
            count++;
        }

        printf("%d",count);

        for(i;i<=count;i++)
        {
            if(i%2==1)
            {
                fputc(plus,third);
                ch2=fgetc(first);
                while(ch2 != EOF || ch2 != ' ')
                    putc(ch2,third);
                    ch2=fgetc(first);
            }
            else if(i%2==0)
            {
                fputc(minus,third);
                ch2=fgetc(second);
                while(ch2 != EOF || ch2 != ' ')
                    putc(ch2,third);
                    ch2=fgetc(second);
            }
                fputc(space,third);         
        }


    fclose(first);
    fclose(second);
    fclose(third);

    return 0;
}

看看这里的两个while循环:

        if(i%2==1)
        {
            fputc(plus,third);
            ch2=fgetc(first);
            while(ch2 != EOF || ch2 != ' ')
                putc(ch2,third);
                ch2=fgetc(first);
        }
        else if(i%2==0)
        {
            fputc(minus,third);
            ch2=fgetc(second);
            while(ch2 != EOF || ch2 != ' ')
                putc(ch2,third);
                ch2=fgetc(second);
        }

第一个问题是ch2 != EOF || ch2 != ' ' ch2 != EOF || ch2 != ' '永远都是真的。 如果ch2是EOF,则第一个条件为假,但第二个条件为真。 如果ch2是空格,则第二个条件为false,第一个条件为真。 如果不是,两者都是真的。

要检查是否ch 没有EOF,而不是一个空间:

while(ch2 != EOF && ch2 != ' ')

如果不是这样,这有效:

char ch[256],ch1[256],ch2;

您将ch2定义为char ,而fgetc返回int EOF超出了char的范围,因此您永远不会看到该值。 将其更改为int

char ch[256],ch1[256]
int ch2;

你的while循环也没有任何括号。 所以你实际拥有的是:

            while(ch2 != EOF || ch2 != ' ') {
                putc(ch2,third);
            }
            ch2=fgetc(first);

ch2永远不会在循环内部发生变化,所以你有一个无限循环。 把括号放在它们所属的位置:

        if(i%2==1)
        {
            fputc(plus,third);
            ch2=fgetc(first);
            while(ch2 != EOF && ch2 != ' ') {
                putc(ch2,third);
                ch2=fgetc(first);
            }
        }
        else if(i%2==0)
        {
            fputc(minus,third);
            ch2=fgetc(second);
            while(ch2 != EOF && ch2 != ' ') {
                putc(ch2,third);
                ch2=fgetc(second);
            }
        }

除此之外,在进入for循环之前, firstsecond文件指针都在每个文件的末尾,所以没有什么可读的。

在进入此循环之前,您需要调用rewind(first)rewind(second)

最后, count未初始化。 它可能包含一些随机数字,因此你的循环可能比你想要的运行多次。

一定要将其设置为0:

int i=1,count=0;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM