Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2009, 23:43   #1
Юлькин
 
Регистрация: 12.04.2009
Сообщений: 8
По умолчанию Сортирока таблицы

Добрый вечер! задача отсортировать таблицу по полю id. функция sort не работает(((Помогите разобраться!!Пожалуйста!!!

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct computers
{
        int id;
        char surname[15];
        char sex[15];
        int number_of_group;
        int balls;
}row[100];
 
char menu (void);
void add_row (void);
void view_row (void);
void sort(void);
 
int main()
{
    bool f_do = true;
        while (f_do)
        {
                char number = menu();
                switch (number)
                {
                        case '1': add_row(); break;
                        case '2': view_row (); break;
                        case '3': sort(); break;
                        default: f_do = false; break;
                }
        }
        return 0;
}
 
 
char menu (void)
{
        char number;
    printf("\t\tMENU\n");
    printf(" \tPrint 1 for adding row\n");
    printf(" \tPrint 2 for showing\n");
    printf(" \tPrint 3 for sort \n");
    printf(" \tPrintf 4 for exit\n");
    scanf("\t\t%c", &number);
        return number;
}
 
 
void add_row (void)
{
        FILE *file;
        computers new_row;
    file = fopen("KR9.txt","a");
    for (int i=0; i<1; i++)
    {
        printf ("Enter id\n");
        scanf ("%i", &new_row.id);
                printf ("Enter surname\n");
        scanf ("%s", &new_row.surname);
        printf ("Enter sex\n");
        scanf ("%s", &new_row.sex);
        printf ("Enter number_of_group\n");
        scanf ("%i", &new_row. number_of_group);
        printf ("Enter balls\n");
        scanf ("%i", &new_row.balls);
        fprintf(file,"%i %s %s %i %i\n", new_row.id, new_row.surname, new_row.sex, new_row.number_of_group, new_row.balls);
    }
        fclose(file);
}
 
void view_row (void)
{
    FILE *file;
    printf("id\t surname\t sex   group  balls\n");
        if ((file = fopen("KR9.txt", "r")) == NULL) // ab - добавление в конец двоичного файла;
        {
            printf ("Error in openning file!\n");
            exit(1);
        }
        for(int i = 0; !feof(file); i++)
        {
            fscanf(file,"%i %s %s %i %i\n", &row[i].id, &row[i].surname, &row[i].sex, &row[i].number_of_group, &row[i].balls);
            printf("%i\t %s\t %s\t %i\t %i\n", row[i].id, row[i].surname, row[i].sex, row[i].number_of_group, row[i].balls);
        }
        fclose(file);
}
 
void sort(void)
{
        FILE *file;
    int count,k, i,j;
    int array[20];
        file = fopen("KR9.txt", "rb");
        for(i = 0; i < 10; i++)
        {
                //count=fscanf(file,"%i %s %s %i %i\n", &row[i].id, &row[i].surname, &row[i].sex, &row[i].number_of_group, &row[i].balls);
            array[i]=fscanf(file,"%d\n", &(row[i].id));
            count=array[i];
        for(j=i-1; j>=0; j--)
        {
            if(array[j]<count)
           break;
        array[j+1]=array[j];
        }
        array[j+1]=count;
 
        for(j=0; j<i; j++)
        {
        printf("%i\n", row[j].id);
    }
    }
}
Юлькин вне форума Ответить с цитированием
Старый 01.06.2009, 00:09   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот. Сортируется в локальном массиве.
Код:
void sort(void)
{
FILE *file;
int count=0,i,j;
computers array[20],tmp;
file = fopen("KR9.txt", "r");
while(!feof(file))
 {
 fscanf(file,"%i %s %s %i %i\n", &array[count].id, &array[count].surname, &array[count].sex, &array[count].number_of_group, &array[count].balls);
 count++;
 }
for(i=0; i<count-1; i++)
 for(j=i+1; j<count; j++)
  if(array[j].id<array[i].id)
   {
    tmp = array[i];
    array[i] = array[j];
    array[j] = tmp;
   }
for(i=0; i<count; i++)
 printf("%d\n",array[i].id);
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.06.2009, 20:40   #3
Юлькин
 
Регистрация: 12.04.2009
Сообщений: 8
По умолчанию

Спасибо за помощь!!!
Юлькин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таблицы БД kykysya БД в Delphi 3 02.04.2009 08:21
таблицы ! wolf950 БД в Delphi 0 05.12.2008 16:11
таблицы в си Карол Помощь студентам 3 28.11.2008 19:19
Как вычислять значения вне таблицы WORD, с использованием данных из таблицы WORD prikolist Microsoft Office Word 6 21.11.2008 13:17
убрать вложенные таблицы из таблицы в режиме просмотра 2007 Baxxter Microsoft Office Access 2 17.11.2008 21:28