Форум программистов, компьютерный форум CyberForum.ru

вывод сортировки по алфавиту (ошибка) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ програама файл на с++ http://www.cyberforum.ru/cpp-beginners/thread189658.html
напишите программу считывающую текст из файла и выводящая этот текст в консоли
C++ простое число Подскажите пожалуйста как проверить является ли число простым? http://www.cyberforum.ru/cpp-beginners/thread189649.html
C++ Определить, сигнал какого цвета сигнал горит для пешеходов в этот момент.
3. Работа светофора для пешеходов запрограммирована следующим образом: в начале каждого часа в течение трех минут горит зеленый сигнал, затем в течение двух минут — красный, в течение трех минут — опять зеленый и т. д. Дано вещественное число t, означающее время в минутах, прошедшее с начала очередного часа. Определить, сигнал какого цвета горит для пешеходов в этот момент. 21. Замена всех...
C++ Функция _rmdir
Хотел бы вас попросить навести мне пример маленькой программы по функции _rmdir
C++ создать шаблон http://www.cyberforum.ru/cpp-beginners/thread189641.html
на языке С++ создать шаблон множества чисел, проверить его работоспособность. Для этого написать операторы ввода и вывода, придумать и протестировать пример с использованием созданного шаблона
C++ сортировка строк Помогите пожалйста,очень надо... Отсортировать строки текста по возрастанию и убыванию длин слов. В тексте несколько строк. подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.11.2010, 01:56     вывод сортировки по алфавиту (ошибка)
На С++ всё-таки лучше стандартные контейнеры использовать, а на С вот:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
 
#define NAME_LEN 32
#define NAME_MASK "%31[^\n]%*c"
 
char * win2dos(const char * str){
    static char buf[NAME_LEN];
    CharToOemA(str, buf);
    return buf;
}
 
char * dos2win(const char * str){
    static char buf[NAME_LEN];
    OemToCharA(str, buf);
    return buf;
}
 
typedef struct {
    char name[NAME_LEN];
    char facult[NAME_LEN];
} student_t;
 
int cmp_asc(const void * a, const void * b){
    int ret;
    
    if ( ! ( ret = strcmp(((student_t*)a)->facult, ((student_t*)b)->facult) ) )
        return strcmp(((student_t*)a)->name, ((student_t*)b)->name);
    
    return ret;
}
 
int main(void){
    student_t * students;
    size_t size, i;
    char buf[NAME_LEN];
    
    printf("%s: ", win2dos("Количество студентов"));
    scanf("%u%*c", &size);
    if ( ( students = (student_t*)calloc(size, sizeof(student_t)) ) == NULL ){
        fprintf(stderr, win2dos("Ошибка выделения памяти!\n"));
        exit(1);
    }
    
    for ( i = 0; i < size; ++i ){
        printf("%s #%u\n", win2dos("Студент"), i + 1);
        printf("%s:   ", win2dos("Фамилия"));
        scanf(NAME_MASK, buf);
        strcpy(students[i].name, dos2win(buf));
        printf("%s: ", win2dos("Факультет"));
        scanf(NAME_MASK, buf);
        strcpy(students[i].facult, dos2win(buf));
    }
    
    printf("\n%s:\n", win2dos("Сортированный список"));
    printf("%s\n------------------------------\n", win2dos("Фамилия              Факультет"));
    qsort(students, size, sizeof(student_t), cmp_asc);
    for ( i = 0; i < size; ++i ){
        printf("%-20s ", win2dos(students[i].name));
        printf("%s\n", win2dos(students[i].facult));
    }
    
    free(students);
    exit(0);
}
На самом деле далеко не лучший вариант - сортировать нужно массив указателей, а не сами структуры, но тогда и код сложнее... а так вроде работает
вывод сортировки по алфавиту (ошибка)
 
Текущее время: 00:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru