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