![](/img/trans.png)
[英]How to print two lines from two text files opposite to each other instead of one by one printing in C?
[英]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
循环之前, first
和second
文件指针都在每个文件的末尾,所以没有什么可读的。
在进入此循环之前,您需要调用rewind(first)
和rewind(second)
。
最后, count
未初始化。 它可能包含一些随机数字,因此你的循环可能比你想要的运行多次。
一定要将其设置为0:
int i=1,count=0;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.