Некорректная работа программы по работе с файлами - добавляется лишний символ - C (СИ)
Формулировка задачи:
Доброго времени суток. Есть вот такая вот программа. Она работает корректно, за исключением одного но: в конце она добавляет символ 'я'. Путем переделки цикла while я выяснил, что компилятор почему-то путает символ 'я' с символом конца файла. Почему?
Первый код:
Переделанный цикл while:
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #define N 30
- int main(int argc, char *argv[])
- {
- char c;
- char namein[N],nameout[N];
- int t=0;
- FILE *f;
- FILE *f2;
- if(argc==1)
- {
- printf("Input file name?\n");
- scanf("%s", namein);
- printf("Output file name?\n");
- scanf("%s", nameout);
- }
- if(argc==2)
- {
- strcpy(namein,argv[1]);
- printf("Output file name?\n");
- scanf("%s", nameout);
- }
- if(argc==3)
- {
- strcpy(namein,argv[1]);
- strcpy(nameout,argv[2]);
- }
- if((f=fopen(namein,"r"))== NULL)
- {
- printf("Error \n");
- return 1;
- }
- if((f2=fopen(nameout,"w")) == NULL)
- {
- printf("Error \n");
- return 1;
- }
- while (!feof(f))
- {
- c=getc(f);
- if (c!='.')
- { if(c!='\n')
- fputc(c,f2);
- else fputc(' ',f2);
- }
- else if(t!=1) {
- fputc(c,f2);
- t++;
- }
- else {
- fputc(c,f2);
- fputc('\n',f2);
- t=0;
- }
- }
- fclose(f);
- fclose(f2);
- }
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #define N 30
- int main(int argc, char *argv[])
- {
- char c;
- char namein[N],nameout[N];
- int t=0;
- FILE *f;
- FILE *f2;
- if(argc==1)
- {
- printf("Input file name?\n");
- scanf("%s", namein);
- printf("Output file name?\n");
- scanf("%s", nameout);
- }
- if(argc==2)
- {
- strcpy(namein,argv[1]);
- printf("Output file name?\n");
- scanf("%s", nameout);
- }
- if(argc==3)
- {
- strcpy(namein,argv[1]);
- strcpy(nameout,argv[2]);
- }
- if((f=fopen(namein,"r"))== NULL)
- {
- printf("Error \n");
- return 1;
- }
- if((f2=fopen(nameout,"w")) == NULL)
- {
- printf("Error \n");
- return 1;
- }
- while ((c=getc(f))!=EOF)
- {
- if (c!='.')
- { if(c!='\n')
- fputc(c,f2);
- else fputc(' ',f2);
- }
- else if(t!=1) {
- fputc(c,f2);
- t++;
- }
- else {
- fputc(c,f2);
- fputc('\n',f2);
- t=0;
- }
- }
- fclose(f);
- fclose(f2);
- }
Решение задачи: «Некорректная работа программы по работе с файлами - добавляется лишний символ»
textual
Листинг программы
- while(true)
- {
- c=getc(f);
- if(feof(f))
- break;
- ....
Объяснение кода листинга программы
- В коде представлен бесконечный цикл while(true), который выполняется до тех пор, пока не будет достигнут конец файла (feof(f)).
- В каждой итерации цикла считывается один символ из файла с помощью функции getc(f) и сохраняется в переменную c.
- Если достигнут конец файла (feof(f)), то цикл прерывается.
- В данном случае в вопросе не представлен весь код, поэтому невозможно точно сказать, что происходит после этого. Но обычно в таких случаях происходит обработка полученного символа или его запись в файл.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д