С чего начинать разбираться?
while (scanf("%f %f %f", &a, &b, &c) != 1 || ...float, чтобы формат %f scanf работал правильно.если сначала ввести 1 2 3, то приложение выведет "Ошибка. Введите снова: "
как это исправить?
scanf возвращает число успешно отсканированных полей, возвращаемое scanf значение надо сравнивать с 3 в условии цикла. как это работает
%c выводит только один. Если на одном выведенном байте остановиться -- получится фигня с вопросом. Но если вывести подряд все байты многобайтового символа -- получится этот символ.как исправить
mblen, типа того:#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *a = "Привет, мир";
int s;
setlocale(LC_ALL, "");
for (; *a != '\0'; a+=s) {
s = mblen(a, strlen(a));
printf("%.*s-", s, a);
}
return 0;
}setlocale нужен для того, чтобы mblen понял, в какой кодировке символы на входе. Локаль в момент выполнения должна быть совместимой с кодировкой исходника в момент компиляции, если это условие не выполняется, работать будет неправильно. wchar_t:#include <locale.h>
#include <stdio.h>
#include <stddef.h>
int main() {
wchar_t *a = L"Привет, мир";
setlocale(LC_ALL, "");
for (; *a != '\0'; a++) {
printf("%lc-", *a);
}
return 0;
}setlocale нужен для другого: он говорит внутренностям printf в какую локаль выполняется вывод чтобы в неё конвертировать wchar_t. Если локаль во время выполнения не будет соответствовать кодировке исходника, код всё равно будет работать. При повторной итерации read, по идее, должен вернуть 0, так как все прочитано
read или вернуть из неё -1 (и установить errno, например, в EINTR). Асинхронный сокет вернёт из read -1 и установит errno в EAGAIN или EWOULDBLOCK.Connection: Keep-Alive или отсутствию заголовка Connection: close в его ответе если это HTTP/1.1. Его можно попросить закрыть соединение после ответа, послав запрос с заголовком Connection: close или можно избежать блокировки в read прочитав только данные ответа размер которых прислан в заголовке ответа Content-Length. Что не так с процедурой?
stdcall test_proc, 11 … proc test_proc, ms … mov rbx, qword ptr ms
403004: 48 c7 c1 0b 00 00 00 mov $0xb,%rcx
40300b: e8 19 00 00 00 callq 0x403029
…
40307b: 48 8b 5d 10 mov 0x10(%rbp),%rbx дамп postgres, после чего, если комманда с дампом выполнилась…
pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz EXIT_STATUS=$? if [[$EXIT_STATUS -eq "0"]]
if pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz$? -- это статус завершения последней команды, а у вас там пайплайн и последняя команда -- gzip. Статус завершения именно pg_dump не проверяется, ни первым вариантом, ни вторым. Последняя кавычка ни в какую не хочет убираться, не могу понять, в чем дело
std::string variable_value = var.substr(variable_value_start + 1, variable_value_end - 1);
std::string::substr -- это длина выделяемой подстроки, а не индекс конца.std::string variable_value = var.substr(variable_value_start + 1,
variable_value_end - variable_value_start - 1); for (int i = 0; i<2; i++){ group.PutCar(i,Car(marks[i],powers[i],costs[i],displaces[i])); }
group[2].Print();void Group::Print(){
for (int i = 0; i<sizeof(array); i++){
array[i].Print();
}
};operator double (){
int summ = 0;
for(int i = 0; i < sizeof(array); i++){
summ += array[i].getCost();
}цифра три на левой части дисплея имеет код 9Е и чтобы вывести результат сложения 1 + 2 мне надо 3 как-то преобразовать в 9Е
0xfa, 0x0a, 0xb6, 0x9e, 0x4e, 0xdc, 0xfc, 0x8a, 0xfe, 0xde. Почему вместо строки появляется мусор?
size_t xpath_formatted_size = vsnprintf(NULL, 0, xpath, arguments); char* xpath_formatted = malloc(xpath_formatted_size); vsnprintf(xpath_formatted, xpath_formatted_size, xpath, arguments);
vsnprintf(…, arguments) меняет arguments.Как это исправить?
char* xpath_format(const char* xpath, ...)
{
va_list arguments;
va_start(arguments, xpath);
size_t xpath_formatted_size = vsnprintf(NULL, 0, xpath, arguments) + 1;
va_end(arguments);
va_start(arguments, xpath);
char* xpath_formatted = malloc(xpath_formatted_size);
vsnprintf(xpath_formatted, xpath_formatted_size, xpath, arguments);
va_end(arguments);
return xpath_formatted;
} --to-command -- это прикольно.tar -xzvOf archive.tar.gz | tar -xzvO | tar -xzvO | … | tar -xzvO | tar -xzv Зачем он для такой строчки на 69, 70ой строчке добавляет к j такую странную константу.
-fdump-tree-all (фиг знает, как сделать это на godbolt.org, я проверял локально), то уже в самом первом дампе можно увидеть, что if (arr[j - 1] > arr[j]) превращается в это:if (*(arr + ((sizetype) j + 1073741823) * 4) > *(arr + (sizetype) ((unsigned int) j * 4)))j + 1073741823 превратилось в add r3, r3, #1073741824
subs r3, r3, #1j + 1073741824 - 1. После умножения на 4 старшие два бита j теряются, но в чём смысл использования 30-битной -1 вместо 32-битной -- мне непонятно.sub r3, r3, #1. Ещё интересно, что даже с -O2 эта константа остаётся в сгенерированном коде, а исчезает только с -Os. Выглядит как регрессия. d не инициализирован, а в том, что колическтво итераций цикла вывода массива d не зависит от того, сколько элементов было занесено в этот массив. Правильным решением было бы как-то их связать, например так:int i = 0, n;
while (piece != NULL)
{
d[i] = piece;
piece = strtok(NULL, " ");
i++;
}
n = i;
for (i = 0; i < n; i++) {
if(i%2==0)
printf("%s ",d[i]);
} ошибка возникает на моменте сдвига элементов. Как ее исправить?
data = (Student*)realloc(data, count * sizeof(Student)); for (int i = count; i > offset; i--) { data[i] = data[i - 1]; }
count элементов, то последний имеет индекс count - 1. Этот цикл должен быть таким: for (int i = count - 1; i > offset; i--) Почему при выполнение данной команды ОС продолжает работать до момента перезагрузки?
rm -rf / файлами не будет освобождено и их содержимое не будет потеряно, пока они не будут закрыты. Можно будет продолжать читать и писать в них, в т.ч. ядро будет продолжать использовать их для реализации механизмов виртуальной памяти. в функции main, почему то выводит мусор
%32[^,] может записать до 33 байт (32 символа из файла + 0), что не влезет в такое поле: char title[32];. Если файл в кодировке utf-8, то байтов в полях может быть больше чем символов. нигде не нашел описания ни драйвера, ни устройства чтобы самостоятельно там чем-то управлять.