Member 13718607 Ответов: 3

Как читать предложения из текстового файла и хранить эти предложения в массиве.


Я попробовал, но первое предложение только читалось, или это предложение не сохранялось в массиве. Так что, пожалуйста, помогите мне.

Что я уже пробовал:

#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char c[100];
int i;
FILE *fp;
clrscr();
if((fp=fopen("hai.txt","r"))==NULL)
{
printf("Error! opening file");
getch();
}
else
{
fscanf(fp," %[^?]",c);
printf("%s\n",c);
}
getch();
fclose(fp);
}

KarstenK

ваш буфер слишком мал. Получите размер файла и работайте с новыми и удаленными файлами.

3 Ответов

Рейтинг:
2

CPallini

Выбросьте такой древний компилятор и используйте C++ если сможешь.
Если вы не можете использовать C++, чем - то вроде

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ITEMS 200
#define CHARS 100


int main()
{
  char *  ar[ITEMS];
  char tmp[CHARS];
  int i;
  FILE *fp;
  if((fp=fopen("hai.txt","r"))==NULL)
  {
    printf("Error! opening file\n");
    return -1;
  }

  i = 0;
  while ( i < ITEMS &&  fscanf(fp, " %[^?]", tmp) == 1)
  {
    fgetc(fp);
    ar[i] = strdup(tmp);
    ++i;
  }

  fclose(fp);

  int k = 0;
  while ( k < i)
  {
    printf("ar[%d] = %s\n", k, ar[k]);
    ++k;
  }
  while ( k-- )
    free(ar[k]);

  getchar();

  return 0;
}

это может быть только отправной точкой (ваш код должен быть надежным).


Maciej Los

5ed!

Рейтинг:
1

OriginalGriff

Ну... чтобы прочитать больше одного предложения, вам понадобится петля какой-то формы.

Я бы сделал это так: прочитал весь файл в память (используйте длину файла, чтобы сказать вам, сколько памяти выделить буферу чтения), а затем просканировал его в поисках "предложений". Вероятно, вам придется проделать этот процесс дважды: первый раз, чтобы узнать, сколько предложений существует - так что вы можете выделить подходящий массив указателей char* - и второй раз, чтобы поместить предложения в массив. Вам также нужно будет выделить достаточно места для каждого предложения (используя malloc) и скопировать предложение поперек, добавив нулевой Терминатор.

Поэтому начните с написания функции для чтения файла и возврата символа char* к первому символу.
Затем напишите функцию, которая проверяет "конец предложения" и возвращает true или false. Помните, что предложение может заканчиваться на".","! "или"? " (или быть концом текста).
Затем напишите функцию, которая подсчитывает предложения.
Наконец, напишите функцию, которая разбивает его и возвращает массив указателей char*.


Рейтинг:
0

Patrice T

Чтобы повторить что-то, вы должны использовать циклическую структуру:
С Петлями[^]
цикл for В C[^]
For, While и Do While циклы в C - Cprogramming.com[^]

Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.

#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
  char c[100];
  int i;
  FILE *fp;
  clrscr();
  if((fp=fopen("hai.txt","r"))==NULL)
  {
    printf("Error! opening file");
    getch();
  }
  else
  {
    fscanf(fp," %[^?]",c);
    printf("%s\n",c);
  }
  getch();
  fclose(fp);
}

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]


Maciej Los

5ed!

Patrice T

Спасибо