Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- char ** words; // массив строк
- int wordCount = 0; // текущее количество строк
- // процедура для вывода элемента по индексу массива
- void printElement(int index) {
- // защита от попытки доступа к несуществующему индексу
- if (index > wordCount - 1) {
- printf("Максимальный номер элемента: %d\n", wordCount - 1);
- }
- // вывод в консоль значения элемента
- else {
- printf("Элемент с номером %d = %s\n", index, words[index]);
- }
- }
- // процедура сортировки массива
- void sortArray() {
- int index; // счётчик цикла
- int isSorted = 0; // текущий статус сортировки массива
- char * pTmp; // переменная для обмена элементов
- // пока массив не отсортирован
- while (!isSorted) {
- isSorted = 1;
- // проходим массив с 0 элемента до предпоследнего
- for (index = 0; index < wordCount - 1; index++) {
- // сравниваем текущий и следующий элементы
- if (strcmp(words[index], words[index + 1]) > 0) {
- // если они отсортированы неправильно, меняем их местами,
- // используя временную переменную
- pTmp = words[index];
- words[index] = words[index + 1];
- words[index + 1] = pTmp;
- // устанавливаем статус массива - не отсортирован
- isSorted = 0;
- }
- }
- }
- }
- // вывод всех элементов массива
- void printArray() {
- int index;
- // проходим массив с 0 элемента до последнего
- for (index = 0; index < wordCount; index++) {
- // выводим каждый элемент в консоль
- printf("%d. %s\n", index, words[index]);
- }
- }
- // функция, реализующая меню
- void menu() {
- printf("\nВыберите действие:");
- printf("\nP - вывод массива; S - сортировка; число - вывод одного элемента массива; E - выход\n");
- // считывание строки символов, введенных пользователем
- // в зависимости от введенных символов будет вызвана соответствующая функция
- char input[255];
- scanf("%s", input);
- if (!strcmp(input, "P")) {
- printArray();
- }
- else if (!strcmp(input, "S")) {
- sortArray();
- printArray();
- }
- else if ((input[0] >= '0') && (input[0] <= '9')) {
- printElement(atoi(input)); /* */
- }
- else if (!strcmp(input, "E")) {
- exit(0);
- }
- else {
- printf("Неизвестная команда!\n");
- }
- }
- // процедура, читающая файл и заполняющая массив
- void fileRead() {
- // открытие файла на чтение
- FILE * file;
- file = fopen("info.txt", "r");
- // переменная для чтения одного слова из файла
- char * word[1024];
- // чтение в цикле очередного слова в файле
- // и сохранение в переменную word
- while (fscanf(file, "%s\n", &word) != EOF) {
- // выделение памяти для массива words
- if (wordCount == 0) {
- words = (char **)malloc(sizeof(char *));
- }
- // если длина массива больше 1, то увеличиваем длину массива на 1
- else {
- words = (char **)realloc(words, (wordCount + 1) * sizeof(char *));
- }
- // выделение для строки памяти объёмом, равным
- // количеству символов в прочитанной строке + 1 (\0 символ);
- // сохранение указателя на строку в массиве ** words
- words[wordCount] = (char *)malloc(strlen(word)+1);
- // копирование прочитанного слова в новую строку массива words
- strcpy(words[wordCount], word);
- // увеличение счётчика слов
- wordCount++;
- }
- fclose(file);
- }
- int main(int argc, char *argv[]) {
- // переключение кодировки консоли для вывода русских букв
- system("chcp 1251");
- system("cls");
- // вызов функции чтения файла
- fileRead();
- // вызов menu в бесконечном цикле
- while (1)
- {
- menu();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement