Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
djeyz
2 / 2 / 3
Регистрация: 01.04.2013
Сообщений: 70
1

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

15.04.2013, 23:13. Просмотров 849. Ответов 4
Метки нет (Все метки)

Реализовать работу с массивом строк:
a. Выполнить считывание и заполнение массива строк из заданного текстового файла (для удобства считывания представить строки в файле последовательно, на новой строке - следующая). Вывести считанные строки на экран.

пытаюсь выполнить задание
и написал вот такое )))

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#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; //в этой строке

может неправильно присваиваю подскажите пожалуйста!!буду признателен и благодарен!!!

Добавлено через 39 минут
извиняюсь перепутал
вместо
e = getc(fp);

e = fgetc(fp);

и еще один вопрос!При считывании с файла символов(после подсчета количества слов в тексте) необходимо использовать rewind(fp)???чтобы потом опять считать символы во втором цикле do{}while()??
Заранее спасибо
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2013, 23:13
Ответы с готовыми решениями:

Написать программу, выводящую на экран несколько строк заданного текстового файла
Задание: Написать программу, выводящую на экран строки с 205 по 215 файла...

Считывание текстового файла
Здравствуйте, уважаемые форумчане. Была задачка - написать программу, которая...

Считывание структуры из текстового файла
Привет. Как можно структуру считать из текстового файла, что бы потом можно...

Считывание символов из текстового файла
Помогите пожалуйста, не могу понять как это записать в С(Си):cry: Напишите...

Не работает считывание данных из текстового файла
Ребят проблема. Нужно считать числовую матрицу из файла и забить ее в массив....

4
anmartex
...
1710 / 1203 / 909
Регистрация: 12.02.2013
Сообщений: 1,978
16.04.2013, 09:13 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от djeyz Посмотреть сообщение
для удобства считывания представить строки в файле последовательно, на новой строке - следующая
Т.е., как я понимаю, новое слово на новой строке. Тогда зачем вы ищите пробел при подсчёте слов и при их загрузке? Может я не правильно интерпретирую написанное? Если верно, то я бы написал что-то на подобии этого:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#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
djeyz
2 / 2 / 3
Регистрация: 01.04.2013
Сообщений: 70
16.04.2013, 19:08  [ТС] 3
мне так посоветовал программист, который дал задание!спасибо за программку щас разберусь)))
0
djeyz
2 / 2 / 3
Регистрация: 01.04.2013
Сообщений: 70
16.04.2013, 20:29  [ТС] 4
только вот один вопрос возник

C
1
typedef char TWord[30];
создание TWord[30] - создается переименованный тип величиной 30 символов, получается при компиляции не каждое слово после пробела заносится, а когда все 30 элементов заполнятся, тогда прекращается считывание.

C
1
for (i = 0; fgets(array[i], sizeof(TWord), f) != NULL; ++i)
т.е. array[i] = "30 символов" а не слово.

используя вашу наработку попытаюсь сам набить как нужно, но все равно спасибо,сам бы так никогда не догадался написать))))))))
0
anmartex
...
1710 / 1203 / 909
Регистрация: 12.02.2013
Сообщений: 1,978
17.04.2013, 03:43 5
Функция fgets считывает либо 29 символов, либо до конца строки, т.е. пока не встретит '\n'. Размер в 30 не я задал, а вы в своём коде, я лишь повторил. Но учитывая, что каждое слово у вас на новой строке, и что слово вряд ли будет превышать 29 символов, то данный подход не противоречит заданию.
0
17.04.2013, 03:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2013, 03:43

Считывание из текстового файла в переменную типа char[250].
С наступившим вас, уважаемые программисты! У меня TURBOC.3_0. Стоит задача...

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

Считывание строк из файла и их сортировка
дана задача:Описать процедуру sortStrings(S0, S1), считывающую все строки из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru