Программа не выполняет то что должна - C (СИ)
Формулировка задачи:
помогите разобраться... программа не делает что должна (((
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *f, *Out;
char fn[20],result[20];
int ch;
printf("Enter File Name: \n");
scanf("%s", fn);
if ((f=fopen(fn,"rt"))==NULL)
{
printf("Error! This file don`t find! \n");
printf("Enter correct file name:");
scanf("%s",fn);
if ((f=fopen(fn,"rt"))==NULL){printf("Try again later!\n");}
}
printf("Enter result file name: \n");
scanf("%s", result);
if ((Out=fopen(result,"wt"))==NULL)
{
printf("There is no file with this name!");
}
while ((ch=fgetc(f))!=EOF)
{
while(ch==' ')
{}
while(ch!=' ') //что бы небыло в файле печатает в выходной один символ
{fputc (ch,Out);} // пока не остановишь программу ((( что делать?
fputc (' ',Out);
}
printf("End of program");
fclose(fn);
fclose(result);
return 0;
getchar();
}Решение задачи: «Программа не выполняет то что должна»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *f, *Out;
char fn[20],result[20];
int ch;
printf("Enter File Name: \n");
scanf("%s", fn);
if ((f=fopen(fn,"rt"))==NULL)
{
printf("Error! This file don`t find! \n");
printf("Enter correct file name:");
scanf("%s",fn);
if ((f=fopen(fn,"rt"))==NULL){printf("Try again later!\n");}
}
printf("Enter result file name: \n");
scanf("%s", result);
if ((Out=fopen(result,"wt"))==NULL)
{
printf("There is no file with this name!");
}
while ((ch=fgetc(f))!=EOF)
{
//while(ch==' ')
//{}
//while(ch!=' ')// вот здесь Вы сами загнали себя в цикл бесконечный. Ведь войдя в этот цикл ch не меняется, остается первым символом (не равным ' ') из входного файла
if(ch!=' ')
{fputc (ch,Out);} // пока не остановишь программу ((( что делать?
fputc (' ',Out);
}
printf("End of program");
fclose(f);//
fclose(Out);//
return 0;
getchar();
}
Объяснение кода листинга программы
- В начале программы подключаются необходимые библиотеки.
- Затем определены и инициализированы переменные:
—
fиOut— указатели на файлы; —fnиresult— массивы для ввода имен файлов. - Пользователю предлагается ввести имя исходного файла, после чего выполняется попытка его открытия. Если файл не найден или его открытие невозможно, выводится сообщение об ошибке и запрашивается правильное имя файла.
- После успешного открытия исходного файла пользователю предлагается ввести имя результирующего файла. Если файл не может быть открыт, выводится сообщение об ошибке.
- Затем выполняется цикл по символам исходного файла. Если текущий символ не является пробелом, он записывается в результирующий файл, а затем записывается пробел.
- По завершении цикла выводится сообщение
End of program, после чего файлы закрываются. - Программа возвращает 0, что означает успешное завершение.
- Выводится сообщение
Press any key to continue, чтобы программа не закрылась сразу после выполнения.