Использование временного файла. Ошибка! - C (СИ)
Формулировка задачи:
Что здесь делаю не так? Нужно, чтобы прога убирала табуляцию и сохраняла в том же файле, из которого взяла текст.
FILE *in,*tmp; char buf[200]; in=fopen("FirstFile.txt","rb"); tmp=tmpfile(); fseek(tmp,0l,SEEK_SET); while (fgets(buf,200,in)) if (buf[0]='\t') fputs(&buf[1],tmp); else fputs(&buf[0],tmp); fclose(in); in=fopen("FirstFile.txt","wb"); fseek(tmp,0l,SEEK_SET); while (fgets(buf,200,tmp)) if (buf[0]='\t') fputs(&buf[1],in); else fputs(&buf[0],in); fclose(tmp); fclose(in);
Решение задачи: «Использование временного файла. Ошибка!»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(int argc, char ** argv){ FILE * fin, * fout, *ftmp; char buf[BUFSIZ], * pbuf; if ( argc < 2 ){ fprintf(stderr, "Usage: %s file_name\n", argv[0]); exit(EXIT_FAILURE); } if ( ( fin = fopen(argv[1], "r") ) == NULL ){ fprintf(stderr, "%s: can't open file %s for input!\n", argv[0], argv[1]); exit(EXIT_FAILURE); } if ( ( ftmp = tmpfile() ) == NULL ){ fprintf(stderr, "%s: can't create tmp file!\n", argv[0]); fclose(fin); exit(EXIT_FAILURE); } while ( fgets(buf, BUFSIZ, fin) ){ for ( pbuf = buf; *pbuf && isspace(*pbuf); ++pbuf ) ; if ( fputs( ( *pbuf ) ? pbuf : "\n", ftmp) == EOF ){ fprintf(stderr, "%s: can't write to tmp file!\n", argv[0]); fclose(fin); exit(EXIT_FAILURE); } } if ( ferror(fin) || fclose(fin) ){ fprintf(stderr, "%s: error while reading file %s!\n", argv[0], argv[1]); exit(EXIT_FAILURE); } rewind(ftmp); if ( ( fout = fopen(argv[1], "w") ) == NULL ){ fprintf(stderr, "%s: can't open file %s for output!\n", argv[0], argv[1]); exit(EXIT_FAILURE); } while( fgets(buf, BUFSIZ, ftmp) ){ if ( fputs(buf, fout) == EOF ){ fprintf(stderr, "%s: can't write to file %s!\n", argv[0], argv[1]); exit(EXIT_FAILURE); } } if ( ferror(ftmp) || fclose(ftmp) ){ fprintf(stderr, "%s: error while reading tmp file!\n", argv[0]); exit(EXIT_FAILURE); } if ( fclose(fout) ){ fprintf(stderr, "%s: can't close file %s!\n", argv[0], argv[1]); exit(EXIT_FAILURE); } fprintf(stderr, "Done.\n"); exit(EXIT_SUCCESS); }
Объяснение кода листинга программы
- Объявление переменных:
- fin (входной файл)
- fout (выходной файл)
- ftmp (временный файл)
- buf (буфер для чтения)
- pbuf (указатель на текущий символ в буфере)
- Проверка наличия достаточного количества аргументов (должно быть не менее 2).
- Открытие входного файла для чтения.
- Создание временного файла.
- Чтение входного файла построчно и запись в временный файл, удаляя лишние пробелы в конце каждой строки.
- Закрытие входного файла.
- Открытие выходного файла для записи.
- Чтение временного файла и запись в выходной файл.
- Закрытие временного файла.
- Закрытие выходного файла.
- Вывод сообщения об успешном выполнении.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д