Проблема с подключением 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;
}