Считывание текста из файла с новой строки! - C (СИ)
Формулировка задачи:
Дан текст в файле input.txt. Проверяет чтобы после каждой точки предложение начиналось с большой буквы.Корректный текст записывает в файл output.txt.Корректно преобразует только первую строку.Но если в файле input.txt написать слово или предложение с новой строки,происходит ошибка .Задача состоит в том,чтобы происходило считывание из файла с новой строки.Помогите,пожалуйста!
# include<stdio.h> # include<windows.h> # include<string.h> void main() { SetConsoleOutputCP(1251); FILE *f; FILE *g; char s[80]; int np,i,t; char *p; f=fopen("input.txt", "r"); if (f==NULL) { printf("файл не найден"); return; } t=0; while(1) { p=fgets(s,80,f); if (p==NULL) { printf("файл закончился\n");break; } else { printf("прочитана строка:\n%s",s); while(t<strlen(s)) { np=t; i=t+1; while (s[i]!='.') { if ((s[np]>=-32) && (s[np]<=0)) s[np]-=32; if((s[i]>=-64)&&(s[i]<-32)) s[i]+=32; i++; } t=i+1; } } } fclose(f); g=fopen("output.txt", "w"); fprintf(g,"%s",s); fclose(g); printf("Преобразованный текст:\n%s",s); getchar(); getchar(); }
Решение задачи: «Считывание текста из файла с новой строки!»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { FILE* fin; FILE* fout; const size_t bufsize = 4*1024*1024; size_t count, i; char buffer[bufsize]; int havepoint; fin = fopen("input.txt" , "r"); fout = fopen("output.txt", "w"); havepoint = 1; do { i = 0; count = fread(buffer, sizeof(char), bufsize, fin); while(i<count) { if(buffer[i] == '.') havepoint = 1; else if(havepoint == 1) if(isalpha(buffer[i]) != 0) { buffer[i] = toupper(buffer[i]); havepoint = 0; } ++i; } fwrite(buffer, sizeof(char), count, fout); } while(count == bufsize); fclose(fout); fclose(fin); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и строками.
- Объявление переменных:
—
fin
иfout
- указатели на файлы для чтения и записи; —bufsize
- размер буфера; —count
- количество считанных символов; —i
- счётчик символов в буфере; —buffer
- буфер для считывания текста; —havepoint
- флаг наличия точки в тексте. - Открытие файлов
fin
иfout
в режимах чтения и записи соответственно. - Установка флага
havepoint
в значение 1. - В цикле до тех пор, пока не достигнут конец файла, происходит чтение текста из файла в буфер.
- В цикле по символам буфера проверяется:
— Если текущий символ - точка, то флаг
havepoint
сбрасывается; — Если флагhavepoint
равен 1 и текущий символ - буква, то символ преобразуется в верхний регистр и флагhavepoint
сбрасывается. - Запись считанного текста из буфера в файл
fout
. - Закрытие файлов
fout
иfin
. - Возврат значения 0, означающего успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д