У меня есть мои координаты и координаты здания. Нужно чтобы я шел по улице и в активити рисовалась стрелка в направлении к этому зданию.
Как не сложно заметить при большой точности, мой результат отличается от результата библиотечного printf.
0,0000000000000012300000000000000679
-- это всё что имеет смысл печатать, и эта часть одинакова в выводе printf и ft_printf. Всё что идёт дальше -- это мусор, который не содержится в исходном числе.long double tt = 0.00000000000000123;
long double a = 1.4142135623730950488; double b = 1.4142135623730950488;
почему переменная типа long double хранит данные с такой же точностью, как и переменная типа double?
long double a = 1.4142135623730950488L;
The type of a floating literal is double unless explicitly specified by a suffix.
Запись в переменную литерала
int a = 1;
1 -- это литерал. Ввод из потока к литералам отношения не имеет.почему если попытаться записать в переименую типа int символ, то не выдается ошибки
#include <iostream>
int main()
{
int a;
std::cin >> a;
std::cout << "a = " << a << ", cin.fail() = " << std::cin.fail() << std::endl;
}
Почему grep regex не работает без экранирования?
3.6 Basic vs Extended Regular Expressions
=========================================
In basic regular expressions the meta-characters ‘?’, ‘+’, ‘{’, ‘|’,
‘(’, and ‘)’ lose their special meaning; instead use the backslashed
versions ‘\?’, ‘\+’, ‘\{’, ‘\|’, ‘\(’, and ‘\)’.
grep -E
или egrep
чтобы получить extended синтаксис по умолчанию. Где можно почитать почему так происходит, почему такие разные вариации записи одно числа в шестнадцатеричной системе исчисления?
A double argument representing a floating-point number is converted in the
style [−]0xh.hhhh p±d, where there is one hexadecimal digit (which is
nonzero if the argument is a normalized floating-point number and is
otherwise unspecified) before the decimal-point character...
char str1[5]; char str2[3]; fgets(str1,5,stdin); fgets(str2,3,stdin);
Я ожидаю, что при запуске введу слово из 5 букв, потом слово из 3
fgets() reads in at most one less than size characters from stream
and stores them into the buffer pointed to by s.
Reading stops after an EOF or a newline.
If a newline is read, it is stored into the buffer.
Написал такую функцию:void privet(char* name ...) { char** ptr = &name; va_list ap; va_start(ap,name); int i = 0; for (;;) { char* p = va_arg(ap,char*); if (p == 0) break; cout << ptr[i] << " " << i << endl; i++; } va_end(ap); }
p = va_arg(ap,char*)
, то и используй p
, который получил, а не ptr
.При ее вызове с тремя аргументами privet("Nagib", "Habib", "Gena")
!quit
, потому что quit не меняется в этой функции и в функциях вызываемых из неё.Может стоит вынести флаг в параметры потока
while(!quit) { if(difftime(time(NULL), last_cycle) > 30) { last_cycle = time(NULL); // Тут мои грязные дела } }
sleep
или что-нибудь типа pthread_mutex_timedlock
/pthread_cond_timedwait
.#include <sys/time.h>
#include <pthread.h>
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
struct thread1 {
pthread_mutex_t lock;
pthread_cond_t cond;
bool quit;
};
static void* thread_process(void *p) {
struct thread1 *arg = p;
for (;;) {
bool quit;
pthread_mutex_lock(&arg->lock);
if (!arg->quit) {
struct timeval now;
struct timespec ts;
gettimeofday(&now, NULL);
ts.tv_sec = now.tv_sec + 30;
ts.tv_nsec = now.tv_usec * 1000;
pthread_cond_timedwait(&arg->cond, &arg->lock, &ts);
}
quit = arg->quit;
pthread_mutex_unlock(&arg->lock);
if (quit)
return NULL;
// Тут мои грязные дела
}
return NULL;
}
int main() {
pthread_t th;
struct thread1 arg = {
.lock = PTHREAD_MUTEX_INITIALIZER,
.cond = PTHREAD_COND_INITIALIZER,
.quit = false,
};
pthread_create(&th, NULL, thread_process, &arg);
char cmd[16];
while(true) {
scanf("%s", cmd);
if(!strcmp(cmd, "quit")) {
pthread_mutex_lock(&arg.lock);
arg.quit = true;
pthread_cond_broadcast(&arg.cond);
pthread_mutex_unlock(&arg.lock);
break;
}
// остальные команды
}
pthread_join(th, NULL);
return 0;
}
как сделать чтобы...разделялись сообщения для клиента?
как нам понимать что клиент вдруг отключился