Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 24.05.2011
Сообщений: 5
1

Сортировка структуры из текстового файла. Borland C для DOS.

24.05.2011, 23:23. Показов 2268. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с решением задачи: необходимо создать структуру, записать ее в текстовый файл, а затем считать эти данные и отсортировать их по названию города (location), а также, по количеству дней (duration). С возможностью реализации на Borland C для DOS. Заранее спасибо.

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

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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
 
//объявление структуры
struct bureau
{
char country[15],location[15],type[10];
int duration;
};
bureau b;
 
//запись в текстовый файл
void input (FILE *in)
{int i=0;
in=fopen("base.txt","w");
do
{
printf("Country & Location ");
scanf("%s %s",b.country,b.location);
printf("Type & duration ");
scanf("%s %d",b.type, &b.duration);
fprintf(in,"%s %s %s %d\n",b.country,b.location,b.type,b.duration);
i++;
puts("To continue [y/n]?");
}
while (getch()!='n');
fcloseall();
}
 
//считывание из текстового файла
void output (FILE *in)
{
char c[80];
clrscr();
in=fopen("base.txt","r");
while(!feof(in))
{ fgets (c,80,in);
printf("%s \n",c);
}
fcloseall();
}
 
int main(void)
{FILE *in;
clrscr();
input(in);
clrscr();
output(in);
getch();
return 0;
}
Вот содержимое файла base.txt:
UK London Tour 5
Ukraine Lviv Tour 10
USA New-York Tour 3
Russia Moscow 8
USA Washington Tour 2


Добавлено через 1 час 21 минуту
вверх

Добавлено через 2 часа 35 минут
вверх
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2011, 23:23
Ответы с готовыми решениями:

Какая версия Borland для MS-DOS 6.22?
Подскажите, какая версия Борланда с/с++ ставится на чистый DOS? ставил Borland 3.1, при установке...

Создание текстового файла в DOS кодировке
Плиз хелп. Возникла проблемка при создании текстового файла. На выходе он должен быть в Dos...

преобразование текстового файла из русской кодировки Dos
как преобразовать текстовый файл из русской кодировки Dos я себе даже представить не могу.....

Сохранение текстового файла с формате DOS\Windows
Добрый день. Возникла необходимость сохранять файл с формате DOS\Windows, а сохранение происходит...

3
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
25.05.2011, 08:59 2
для сравнения строк используется strcmp()
нужно создать массив структур
загрузить в него данные из файла
отсортировать массив функцией

можно использовать функцию qsort(), для которой нужно написать небольшую функцию сравнения, основанную на strcmp()
а можно написать свою функцию, где напрямую использовать strcmp()
1
0 / 0 / 0
Регистрация: 24.05.2011
Сообщений: 5
29.05.2011, 20:45  [ТС] 3
accept, спасибо.
вот только не знаю, как считать данные структуры из файла и записать их в массив

Добавлено через 5 часов 42 минуты
вверх
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
30.05.2011, 02:53 4
UK London Tour 5

C
1
2
3
4
5
6
7
8
9
10
    struct bureau b;
    struct bureau arr[10];
    int asize = 0;
    
    while(fgets(line, sizeof line, ifp) != NULL)
        if (sscanf(line, "%s %s %s %d",
                   b.country, b.location,
                   b.type, &b.duration) == 4
         && asize < 10)
            arr[asize++] = b;
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    struct bureau arr[10];
    int asize;
    struct bureau b;
    int retval;
    
    asize = 0;
    while(fgets(line, sizeof line, ifp) != NULL) {
        retval = sscanf(line, "%s %s %s %d",
                        b.country, b.location,
                        b.type, &b.duration);
        if (retval == 4 && asize < 10)
            arr[asize++] = b;
        else if (retval != 4) {
            fprintf(stderr, "error: incorrect data\n");
            break;
        } else {
            fprintf(stderr, "error: excess data\n");
            break;
        }
    }
2
30.05.2011, 02:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2011, 02:53
Помогаю со студенческими работами здесь

Составить процедуру преобразования текстового файла в кодировку DOS
Дан текстовый файл FileIn, записанный в кодировке Windows. Составить процедуру ANSI_ASCII(FileIn,...

Загрузка данных из Excel и текстового файла в StringGrid (Borland Builder C++)
Здравствуйте! Не подскажите как осуществить загрузку данных из Excel и текстового файла в...

написать программу, выполняющую преобразование текстового файла из русской кодировки DOS в кодировку WINDOWS
в общем кто может помочь написать программу, выполняющую преобразование текстового файла из русской...

Создать отчет для текстового редактора (DOS)
Есть база, есть отчет. Отчет печатается на лазерном принтере. Все бы ничего, но большой расход...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru