Выполнить считывание и заполнение массива строк из заданного текстового файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Реализовать работу с массивом строк: a. Выполнить считывание и заполнение массива строк из заданного текстового файла (для удобства считывания представить строки в файле последовательно, на новой строке - следующая). Вывести считанные строки на экран. пытаюсь выполнить задание и написал вот такое )))
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
char **safe;

int main(){
    FILE *fp;
    int kolslov = 0;
    char e;
    int sl = 0;
    int sm = 0;
    int i=0;
//    char **safe;
    char er[] = "oshibka";
    int r = 0;
    char slov[30];
    
    if((fp = fopen("S:/1.txt", "r")) == NULL ){
        puts(er);
    }
    
    do{
        e = getc(fp);
        if(ferror(fp)){
                puts(er);
                break;
        }
        if(e == ' '){
             kolslov++;   
        }
    }while(!feof(fp));

    safe = malloc(kolslov * sizeof(char*));
    for(i=0;i<20;i++){
        safe[i] = malloc(30*sizeof(char));
    }
// +++++++podschet slov+++++++++++++++++++    
    do{
        e = getc(fp);
        if(ferror(fp)){
                puts(er);
                break;
        }
        if(e == ' '){
             kolslov++;   
        }
    }while(!feof(fp));
//+++++++++++++++++++++++++++++++++++++++++    
    
    do{
        e = getc(fp);
        if(ferror(fp))
        {
             puts(er);
             break;
        }
        if(e != ' ')
        {
             safe[sl][sm] = e;
             sm++;
        }
        else{
            sl++;
            sm = 0;    
        }
    }while(!feof(fp));
 
    printf("%d", kolslov);
    puts(safe[2]);

    getch();
    return 0;
}
3 недели мучаюсь!! не могу понять почему без динамического массива и без первого цикла do{}while (подсчет количество слов) все работает и и каждый элемент массива равен слову (safe[0] = слово)!а так не работает и выдает ошибку safe[sl][sm] = e; //в этой строке может неправильно присваиваю подскажите пожалуйста!!буду признателен и благодарен!!!
извиняюсь перепутал вместо e = getc(fp); e = fgetc(fp); и еще один вопрос!При считывании с файла символов(после подсчета количества слов в тексте) необходимо использовать rewind(fp)???чтобы потом опять считать символы во втором цикле do{}while()?? Заранее спасибо

Решение задачи: «Выполнить считывание и заполнение массива строк из заданного текстового файла»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    typedef char TWord[30];
    static const char CFileName[] = "1.txt";
 
    FILE* f = fopen(CFileName, "r");
    TWord buff;
    TWord* array;
    size_t count;
    size_t i;
 
    if (f == NULL)
    {
        perror(CFileName);
        system("pause");
        return EXIT_FAILURE;
    }
 
    for (count = 0; fgets(buff, sizeof(TWord), f) != NULL; ++count) { ; }
 
    array = (TWord*) malloc(sizeof(TWord) * count);
 
    rewind(f);
 
    for (i = 0; fgets(array[i], sizeof(TWord), f) != NULL; ++i) { ; }
 
    fclose(f);
 
    for (i = 0; i < count; ++i)
    {
        printf("%s", array[i]);
    }
    printf("\n");
 
    free(array);
 
    system("pause");
 
    return EXIT_SUCCESS;
}

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

  1. Подключение необходимых библиотек для работы с файлами и памятью
  2. Объявление типа данных TWord, представляющего строку из 30 символов
  3. Указание имени файла для чтения
  4. Открытие файла на чтение
  5. Создание буфера для хранения строки
  6. Создание указателя на массив строк
  7. Создание переменной для подсчета количества строк в файле
  8. Чтение файла построчно с помощью функции fgets до тех пор, пока не встретится пустая строка или не закончится файл
  9. Выделение памяти под массив строк
  10. Переход к началу файла с помощью функции rewind
  11. Заполнение массива строк с помощью функции fgets
  12. Закрытие файла
  13. Вывод содержимого массива строк на экран
  14. Освобождение памяти, выделенной под массив строк
  15. Ожидание нажатия клавиши для завершения работы программы
  16. Возврат успешного завершения программы

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


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

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

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