Считывание текста из файла с новой строки! - 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;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами и строками.
  2. Объявление переменных: — fin и fout - указатели на файлы для чтения и записи; — bufsize - размер буфера; — count - количество считанных символов; — i - счётчик символов в буфере; — buffer - буфер для считывания текста; — havepoint - флаг наличия точки в тексте.
  3. Открытие файлов fin и fout в режимах чтения и записи соответственно.
  4. Установка флага havepoint в значение 1.
  5. В цикле до тех пор, пока не достигнут конец файла, происходит чтение текста из файла в буфер.
  6. В цикле по символам буфера проверяется: — Если текущий символ - точка, то флаг havepoint сбрасывается; — Если флаг havepoint равен 1 и текущий символ - буква, то символ преобразуется в верхний регистр и флаг havepoint сбрасывается.
  7. Запись считанного текста из буфера в файл fout.
  8. Закрытие файлов fout и fin.
  9. Возврат значения 0, означающего успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы