Проблема с подключением math.h

Всем здравствуйте! Подскажите пожалуйста, я пишу программу в CodeBlocks на ОС Linux Mint и у меня возникла небольшая проблема в том, что Code Blocks выводит сообщение "underfined reference to fmod". Но при этом, в онлайн компиляторе все работает. Код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "CUnit/Basic.h"

/*! Проверяет, что строка является целым числом
 * \param string = переменная, котрая хранит массив из переменных
**/

// проверка, что строка является целым числом
int is_integer(const char *string) {
    for (int i = string[0] == '-' ? 1 : 0; string[i]; i++)
        if (string[i] < '0' || string[i] > '9') // если не цифра
            return 0; // то не целое число

    return 1; // целое число
}

/*! Проверяет, что строка является вещественным числом, как в обычном виде, так и в экспоненциальном
 * \param string = переменная, котрая хранит массив из переменных
**/

// проверка, что строка является вещественным числом
int is_real(const char *string) {
    int points = 0; // количество точек
    int exponent = 0; // была ли экспонента

    for (int i = string[0] == '-' ? 1 : 0; string[i]; i++) {
        if (string[i] == '.' || string[i] == ',') { // если точка
            points++; // увеличиваем счётчик точек

            if (points > 1 || exponent) // если больше одной точки или была экспонента
                return 0; // то не вещественное число
        }
        else if (string[i] == 'e') {
            if (exponent) // если экспонента уже была
                return 0; // то не вещественное число

            exponent = 1; // обновляем флаг
        }
        else if (string[i] == '-') {
            if (!exponent || string[i - 1] != 'e') // если не было экспоненты, но знак
                return 0; // то не число
        }
        else if (string[i] < '0' || string[i] > '9') { // если не цифра
            return 0; // то не вещественное число
        }
    }

    return 1; // вещественное число
}
/*
void test_is_integer(){
    char str1[2] = "1";
    char str2[3] = "+2";
    char str3[3] = "-2";
    char str4[8] = "ggrr44f";
    char str5[4] = "1.2";

    CU_ASSERT(is_integer(str1));
    CU_ASSERT(is_integer(str2));
    CU_ASSERT(is_integer(str3));
    CU_ASSERT_FALSE(is_integer(str4));
    CU_ASSERT_FALSE(is_integer(str5));
}


void test_is_real(){
    char str1[] = "1.2";
    char str2[] = "1,2";
    char str3[] = "2";
    char str4[] = "ggrr44f";
    char str5[] = "+1.2";
    char str6[] = "-1.2";
    char str7[] = "5e-7";
    char str8[] = "5e-a";

    CU_ASSERT(is_integer(str1));
    CU_ASSERT(is_integer(str2));
    CU_ASSERT_FALSE(is_integer(str3));
    CU_ASSERT_FALSE(is_integer(str4));
    CU_ASSERT(is_integer(str5));
    CU_ASSERT(is_integer(str6));
    CU_ASSERT(is_integer(str7));
    CU_ASSERT_FALSE(is_integer(str8));
}

int RunTests()
{
    CU_pSuite  suite;
    CU_initialize_registry();
    suite = CU_add_suite("tests_suite", NULL, NULL);
    CU_ADD_TEST(suite, is_integer);
    CU_ADD_TEST(suite, is_real);
    CU_basic_run_tests();
    CU_cleanup_registry();
    return CU_get_error();
}
*/

int main() {
    char string1[1000]; // первая строка
    char string2[1000]; // вторая строка
    char string3[2000]; // третья строка
    int count;
    do{
        printf("Hello. This application was created in order to perform operations with strings depending on their content\n");
        printf("1. Run tests\n");
        printf("2. Enter value ( Attention, the value can only be "" or "" numbers, as well as everything else )\n");
        printf("3. Processing and displaying the result\n");
        printf("4. Quit\n");
        printf(">");
        scanf("%d", &count); // считываем пункт меню

        // обрабатываем некорректный ввод
        while (count < 1 || count > 4) {
            printf("Incorrect item. Try again: ");
            scanf("%d", &count); // считываем пункт меню заново
        }

        // в зависимости от выбранного пункта выполняем действие
        switch (count){
            // case 1:
            // Run_tests();
            case 2:
                printf("Enter s1: ");
                scanf("%[^\n]%*c", string1); // считываем первую строку
                printf("Enter s2: ");
                scanf("%[^\n]%*c", string2); // считываем вторую строку
                printf("Done\n");
                break;

            case 3:
                if (is_integer(string1) && is_integer(string2)) {
                    printf("s1 and s2 are integer, summ: %d\n", atoi(string1) + atoi(string2));
                    break;
                }
                else if (is_real(string1) && is_real(string2)) {
                    printf("s1 and s2 are real, mod: %lf\n", fmod(atof(string1), atof(string2)));
                    break;
                }
                else {
                    strcpy(string3, string1);
                    strcat(string3, string2);
                    printf("s1 and s2 strings, concat: %s\n", string3);
                    break;
                }
        }
    }while (count != 4); // повторяем, пока не решим выйти
    return 0;
}

Ответы (0 шт):