🦥Alex Fails
т.к. в ней есть инфа, сколько символов записалось
Ned
анальная ебля какая-то это всё...
🦥Alex Fails
Это Си-строки)
Ned
стоп
🦥Alex Fails
вот попробуй въехать в них
Ned
а че я куйню наковал?
Ned
надо же слепить весь вход в одну строку и выдавать её по кускам
🦥Alex Fails
вооотт!!!!
Ned
и аккуратно ообработать переносы
🦥Alex Fails
я об этом в начале и говорил)
Ned
ебись оно колесом, короч
🦥Alex Fails
могу попробовать написать свой вариант сий чудной проги
🦥Alex Fails
чисто для примера безопасной работы с их строками
Ned
Корова дело говорит
🦥Alex Fails
ага
🦥Alex Fails
У тебя, Кстати, есть ограничитель длины
Ned
?
Ned
строки не длиннее 40 символов
Ned
соответственно облако не шире 44х символов
Ned
@AlexFails, ты собрался тоже написать корову?
🦥Alex Fails
да, ща в блокноте пишу
🦥Alex Fails
вернее, я напишу только логику без пузыря
🦥Alex Fails
блядь, у меня ж была где-то поебень, рисующая в буфер текст
🦥Alex Fails
ну лан, хер с ним
Ned
почему если я сделал динамическую строку, я не могу сделать string = "";
Ned
?
Ned
и вынужден string[0]='\0';
Ned
это нормально?
Ned
🦥Alex Fails
Потому что в синтаксисе языка знак '=' при определении переменной и при присваивании играет разную роль
🦥Alex Fails
Так, а тебе обязателно сохранять строчку?
Ned
что значит сохранять?
Ned
ты имеешь ввиду выводить по одному слову?
🦥Alex Fails
То, что можно сразу вывести аргументы
Ned
это имеет смысл, но мы тогда не сможем рисовать динамическое облако
Ned
я уже долго об этом думал
🦥Alex Fails
#include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { if (argc == 1) { printf("USAGE: cowsay <arg1> <arg2> ... <argN>"); return 1; } size_t chars = 0; size_t i; for (i = 1; i < argc; i++) { chars += printf("%.*s", chars, argv[i]); putchar (chars == 40 ? '\n' : ' '); chars %= 40; } return 0; }
🦥Alex Fails
Хотя тут ошибочка есть
🦥Alex Fails
ща поправлю, минутку
Ned
Не, он должен переносить только те слова, которые длиннее 40
🦥Alex Fails
.40s позволяет нам выводить ДО 40 символов
🦥Alex Fails
хотя ща я гляну в фм
Ned
а объясни мне, как нубу, что такое size_t?
Ned
и чему он равен по размеру?
🦥Alex Fails
это тип, который может содержать максимально возможный размер на этой архитектуре
🦥Alex Fails
используется для смещений в массивах, к примеру
Ned
кхм, а вот о таком я не знал
🦥Alex Fails
поэтому strlen его возвращает
🦥Alex Fails
Нед, проверь тот сэмпл, что я ща набросал)
🦥Alex Fails
скорее всего, он чутка косячит)
🦥Alex Fails
но общая идея выглядит примерно так
🦥Alex Fails
там еще надо добавить херь для пузырьков
🦥Alex Fails
и саму корову
🦥Alex Fails
блин, я опять ошибся
🦥Alex Fails
надо не .40s
🦥Alex Fails
а .*s
🦥Alex Fails
ща поправлю
Ned
ага, и после формата в printf() выведи то, что пытаешься вывести)
Ned
полагаю, argv[i]?
🦥Alex Fails
да
🦥Alex Fails
Вот так вот и рождаются юнионы вместо страктов, а потом альтернативно одарённые люди величают даунами)
Ned
оо, прикинь
Ned
она ничего не выводит)
Ned
совсем
Ned
потому что ты лах
Ned
надо chars += printf("%.*s", 40 - chars, argv[i]);
Ned
ведь изначально-то chars = 0
🦥Alex Fails
верно
🦥Alex Fails
я рад, что ты нашел _специально оставленную_ ошибку😆
Ned
но она зарезает слова
Ned
🦥Alex Fails
ага, ок. Нам надо если chars > 40, то i--
Ned
не, нам так не надо
Ned
если i--, она введет кусок слова и слово целиком
🦥Alex Fails
#include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { if (argc == 1) { printf("USAGE: cowsay <arg1> <arg2> ... <argN>"); return 1; } size_t chars = 0; size_t i; for (i = 1; i < argc; i++) { chars += printf("%.*s", 40 - (chars % 40), argv[i] + chars); putchar (chars == 40 ? '\n' : ' '); if(chars >= 40) { chars -= 40; i--; } } return 0; }
Ned
неплохо, но тот самый баг, о котором я говорил, присутствует
Ned
я вот пока хз, как посчитать итоговое кол-во строк
🦥Alex Fails
бля, ща
🦥Alex Fails
Поправил
🦥Alex Fails
он по смещению будет печатать