Взгляните на две 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);
}
}
Кроме того, файловые указатели для first
и second
находятся в конце каждого файла перед входом в цикл for
, поэтому читать нечего.
Вам нужно позвонить rewind(first)
и rewind(second)
перед входом в этот цикл.
Наконец, count
не инициализируется. Он может содержать случайное большое число, поэтому ваш цикл может выполняться намного больше, чем вы предполагаете.
Обязательно установите значение 0:
int i=1,count=0;