gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:10:38 24 4
gpt4 key购买 nike

我需要从 2 个不同的文件中读取并将单词打印到第三个文件,首先我从文件 1 读取并将第一个单词保存到文件第三个,然后从文件 2 读取并将第一个单词从这里保存到第三个文件作为第二个单词,依此类推.. 还有来自 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 是空格,则第二个条件为假,第一个条件为真。如果两者都不是,则两者都为真。

您想检查 ch 是否不是 EOF 并且不是空格:

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

如果不是这个,这工作:

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

您将 ch2 定义为 char,而 fgetc 返回 intEOF 的值超出了 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);
}
}

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

在进入这个循环之前,你需要调用rewind(first)rewind(second)

最后,count 没有被初始化。它可能包含一些随机的大数字,因此您的循环运行的次数可能比您预期的要多。

一定要设置为0:

int i=1,count=0;

关于c - 从两个不同的文件中读取并打印到第三个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53267324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com