Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读取两个不同的文件并打印到第三个文件_C_File - Fatal编程技术网

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

C 读取两个不同的文件并打印到第三个文件,c,file,C,File,我需要从两个不同的文件中读取并将单词打印到第三个文件中,首先从文件1中读取并将第一个单词保存到第三个文件中,然后从文件2中读取并将第一个单词作为第二个单词保存到第三个文件中,依此类推。。文件1中的单词开头有“+”,文件2中的单词开头有“-”。我的问题是,代码没有停止,仍然在工作,并打印到第三个文件“.”(很多点)。谢谢 #包括 #包括 int main(){ 文件*第一、*第二、*第三; 字符ch[256],ch1[256],ch2; int i=1,计数; 字符空间=“”; 字符负='-';

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

#包括
#包括
int main(){
文件*第一、*第二、*第三;
字符ch[256],ch1[256],ch2;
int i=1,计数;
字符空间=“”;
字符负='-';
char plus='+';
first=fopen(“prvy.txt”,“r”);
second=fopen(“druhy.txt”,“r”);
第三个=fopen(“treti.txt”,“w”);
如果(第一个==NULL | |第二个==NULL | |第三个==NULL)
{
printf(“错误”);
出口(1);
}
而(fscanf(第一个,“%255s”,ch)==1)
{
计数++;
}
而(fscanf(秒,“%255s”,ch)=1)
{
计数++;
}
printf(“%d”,计数);

对于(i;i请查看此处的两个
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
为空格,则第二个条件为假,第一个条件为真。如果两者都为假,则两者都为真

您要检查
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
循环之前,
first
second
的文件指针都位于每个文件的末尾,因此无需读取任何内容

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

最后,
count
未初始化。它可能包含一些随机的大数字,因此循环的运行次数可能会超出预期

请确保将其设置为0:

int i=1,count=0;

<代码>计数<代码>是未初始化的,但是这不是最大的问题。感谢无用的<代码> PrtTf(“错误”)< /代码>考虑采用<代码> Pror(“错误”)
相反-它将提供一条人类可读的消息,告诉出错的地方!在不初始化它的情况下使用它将调用未定义的行为。
count++
将添加到发生在那里的任何垃圾值中,不可能知道您的
for
循环将执行多少次。返回一个int。谢谢,解决了许多问题lems,但我的程序仍然不会将字符打印到第三个文件中@dbush@Rudolph你在
for
循环之前添加了
倒带
调用了吗?你是上帝@dbush
int i=1,count=0;