• Как устранить медленную скорость при копировании на USB устройства?

    @Redproxima Автор вопроса
    Как уже заметили коллеги выше - используй другую отличную от NTFS ФС (exFAT - отличный кандидат). От дистрибутива к дистрибутиву драйвер, отвечающий за USB какой попало поставляют. Один через FUSE работает и там обещанная скорость в пределах вменяемой для 3.0, где-то да, через userspace всякие ntfs-3g, где 15 Мб/с - хороший показатель. В общем, не забывай, что NTFS - проприетарщина и нативной поддержки на уровне ядра мы не увидем никогда. Лично мне, как автору статьи, очень легче жить стало после смены ФС. Ту же exFAT читают и мультиварки.
    Написано
  • Как хранить свойства товаров разного рода?

    @Redproxima Автор вопроса
    Похоже на истину? Так должен выглядеть EAV? В сущность Характеристики идет все: от температуры утюга, до литража вместимости холодильника и когда мне нужно посмотреть все имеющиеся у утюга [арактеристики, я просто делаю последовательную выбоhку из INT, VARCHAR| и FLOAT-Значений с объединением по ID_Товара, верно?
    Я бы еще добавил в сущность Характеристики ID-подгруппы, чтобы можно было отделять характеристики лишь для определенного рода товаров, к примеру бытовой от строительной техники.
    637ff61aeba0c172508399.jpeg
  • Как передать в функцию указатель на структуру, описанную в другом хедере?

    @Redproxima Автор вопроса
    Меняем местами include'ы в func.c и все начинает работать.
  • Как реализовать проверку на вводимые символы?

    @Redproxima Автор вопроса
    Олег Филимоненко, что получилось:

    - Не принимает больше 1 символа
    - Не принимает 2 и более симвоов, начинающихся с удовлетворяющих нас символов Y y N n (прим: yo / nutella) (доп. к п.1)
    - Не принимает ничего кроме символов (цифры, знаки и тд, что логично)

    Непонятки:
    - (лично мой косяк где-то выше по коду) Почему-то буфер остается не пустым, но это из за того, что в настройки я вхожу командой, интерпретируемой как %s, буду играться с длиной массива.
    - При проверке на 2 и более символов, позицию байта с символом конца строки пришлось сдвинуть на 2, что странно(((

    Рабочий вариант
    void usrSettings(struct usrSettings_str **usrSet){
    
    int c;                       // Очистка буфера stdin пока не нашел варианта умнее. А проблема в том, что
    do {                         //в буфере остается какой-то хлам, который я не увижу и не уловлю, пока не научусь 
    c = getchar();          //пользоваться отладчиком
    } while (c != '\n' && c != EOF);
    
    char *str;
    
    str = (char *) calloc(BUFLEN, 1);
        printf("Before changing the settings, read the command manual .help\n");
        printf("Are you sure? (Y/y(for 'Yes') or N/n(for 'No' - setting by default/using last changes)\n");
        bzero(str, BUFLEN);
        printf("settings > ");
    
    for(;;)
     {
        fgets(str, BUFLEN, stdin);
        if (*(str + 2) != '\0')    //Вот тут дичайший костыль. Сделано для проверки "не введено ли несколько
                                         //символов", потому что до этого момента при вводе "yo, common" давало true.
                                         //и работает только со смещенеим 2. Было бы не плохо порассуждать, почему так?
        {
            printf("No, only one symbol!\n");
            printf("settings > ");
            bzero(str, BUFLEN);
            continue;
        }
        
        *(str + 1) = '\0';
        
        if ((*str == 'Y') || (*str == 'y'))
          {
            printf("User set Yes\n");
            break;
          }
          if ((*str == 'N') || (*str == 'n'))
          {
              //Exit to parent function
            break;
          }
        else 
           {
              printf("Stop! You must enter 'Y'/'y' for \"Yes\" or 'N'/'n' for \"No\"\n");
              printf("settings > ");
              bzero(str, BUFLEN);
           }
    }
    
    free(str);
    }
  • Как реализовать проверку на вводимые символы?

    @Redproxima Автор вопроса
    В общем, Ваше решение самое элегантное. Спасибо огромное!
  • Как реализовать проверку на вводимые символы?

    @Redproxima Автор вопроса
    CityCat4, и пока я ищу самостоятельно, рискну задать вопрос сюда: У меня для перехода в режим настоек предусмотрена команда .settings, но вот в чем беда: и в Вашем прототипе и в моем, костыльном, какое-то говно остается в буфере ввода stdin. Да, в Win функция fflush(stdin) отрабатывает на ура, но не в .nix-системах. Вот чего сейчас точно не хочется - переводить консоль в другие режимы. Есть велосипед - для очистки буфера применяют зацикленное считывание символов, пока не \n (Выгляело как-то так: scanf("%*[^\n]"), но это же совсем, простите...
  • Как реализовать проверку на вводимые символы?

    @Redproxima Автор вопроса
    CityCat4, Принял, понял, закрепил! Когда окончательно во всем разберусь - оберну в отдельный обособленный работающий кусок кода, как назидательный пример и выложу сюда.
  • Как реализовать проверку на вводимые символы?

    @Redproxima Автор вопроса
    Во-первых, да, Ваш код заработал и отлично себя ведет. Но мой неугомонный ум полез искать еще и вот что нарыл:
    Пример неплохого варианта
    char userGetLine[256]; // строка для чтения
        char confirm; // итоговое целое число
    
        printf("%s", msg); // выводим приглашение ко вводу
        fgets(userGetLine, sizeof(userGetLine), stdin); // считываем строку
    
        // пока не будет считано целое число
        while ((sscanf(userGetLine, "%c", &confirm) != 'Y') || (sscanf(userGetLine, "%c", &confirm) != 'y') || (sscanf(userGetLine, "%c", &confirm) != 'N') || (sscanf(userGetLine, "%c", &confirm) != 'n')   ) {
            printf("Incorrect input. Try again: "); // выводим сообщение об ошибке
            fgets(userGetLine, sizeof(userGetLine), stdin); // и заново считываем строку
        }
    
        // Делаю что-то дальше со своими настройками.

    Идея в том, что мы также берем кусок стандартного буфера и банально втюхиваем его с форматированный ввод. И если юзер написал мусор, то scanf просто не подтвердит принятие и вернет 0 (или 1, не суть. Не True, короче).
    Что можете сказать по этому поводу. Вы бы таким пользовались? Если нет, то почему?

    P.S - Я не совсем уверен в булевых операциях, приведенных в проверке условия. По правилам де-Моргана вроде все должно работать, но это пресловутое '!=' и иже с ним, имеют, на сколько я помню, высший приоритет. Если уж совсем не в тягость, прикиньте в уме, все ли верно, Пожалуйста. Хорошего вечера.
  • Как реализовать проверку на вводимые символы?

    @Redproxima Автор вопроса
    Огромное спасибо за проявленное внимание и потраченное время. Я учту все Ваши советы.
  • Объявление идентификатора #define в прототипе функции в Си (C), можно ли так делать?

    @Redproxima Автор вопроса
    Спасибо Вам большое. Найду книгу по ISBN. Выражаю благодарность всем, кто принял участие в разъяснении вопроса.
  • Керниган, Ритчи: Упражнение 1.13, Я что-то не так понял?

    @Redproxima Автор вопроса
    Roman, все, до меня дошло! Огромное Вам Спасибо за терпение и старание объяснить мне мою ошибку. Я думаю, что топик соит удалить, слишком тупую тему открыл, как мне кажется. Выржаю благодарность Всем, кто принял участие в разъяснении тривиальных вопросов.
  • Керниган, Ритчи: Упражнение 1.13, Я что-то не так понял?

    @Redproxima Автор вопроса
    Roman, я тоже сначала подумал, что от меня требуется частотное распределение, но потом внимательней вчитался в ЭТО и в следующее задание. Так вот, в задании 1.13 требуется написать программу, выводящую гистораммы длин вводимых слов, тоесть если длина слова 5 символов, то выводится 5 "полосок" в гистограмме, если 2 символа в слове - 2 "полоски".
    А вот задание 1.14 звучит уже с четким требованием посторить гистограмму частотного распределения:
    Упражнение 1.14. Напишите программу, печатающую гистограммы частот встречаемости вводимых символов.

    К этому заданию еще не приступал, не сделал еще вертикальную гистограмму, очень уж горю сам ее добить.
    Но все равно спасибо за попытку объяснить. Я понял, что Вы имели ввиду.
  • Зачем в POSIX 'fork' создаёт полную копию?

    @Redproxima Автор вопроса
    В общем, в иностранных ресурсах информации оказалось больше, в частности в комментариях к этому посту человек даёт более-менее ясное разъяснение причины: (https://unix.stackexchange.com/questions/136637/wh... не нужен сильный английский, чтобы вникнуть в суть.
  • Зачем в POSIX 'fork' создаёт полную копию?

    @Redproxima Автор вопроса
    Выходит, когда я создаю процессы с помощью fork(), то мои глобальные переменные копируются, и для каждого процесса появляется своя собственная копия переменных и каждый процесс работает со своей, никак не влияя на остальные, но когда процесс завершает свою работу все его данные пропадают, так?
  • Почему не работает алгоритм сортировки вставкой на c++?

    Кстати, если кому-то понадобится, распишу с полными комментариями каждую строку.
  • Объясните принцип работы цикла из учебника Кернигана?

    @Redproxima Автор вопроса
    [c - '0' ]" - определяет место в одномерном массиве, значение которого мы увеличиваем на единицу, верно? К примеру, вводится цифра(символ) 9. Цифра(символ) 9 в ASCII имеет значение "57", из 57 вычитается 48 (значение цифры(символа) "0" в ASCII.) Получаем 9 - номер ячейки массива, значение которой надо увеличить на единицу. Ход мысли верный?
    Кстати, спасибо большое. Многое стоит делать на свежую голову.