• Альтернативы и операторы goto в C?

    @mayton2019
    Bigdata Engineer
    Давайте не будем рефакторить этот код а создадим новую функцию. Которая делает тоже самое и докажем что полученый код эквивалентен. Тогда и проблема goto будет иметь еще одно решение. Наша функция предположительно будет такая:

    int find_first_zero_row(int **matrix, int cols, int rows) {
       .....
       return -1;
    }


    Будет такой контракт что если строка из нулей найдена то мы получаем ее номер или -1 в противном случае.

    Нам может понадобиться вспомогательная функция.

    int all_items_are_zero(int *items, int length) {
       ....
    }


    Мне кажется что с таким набором нам не понадобится goto. Декомпозиция кода на функции - это один из способов избежать goto.

    P.S. Не бойтесь вводить в код функции. Торвальдс не запрещает функции в языке С. Ценнее код который работает правильно а не тот который выглядит как колбаса и глючит временами.
    Ответ написан
    Комментировать
  • В каком углу экрана лучше (традиционно принято) располагать шкалу здоровья?

    Tiendil
    @Tiendil
    Разработчик ПО.
    Вопрос сформулирован некорректно и без контекста ответить на него не получится.

    Суть в том, что шкала здоровья (как и любые другие элементы интерфейса) должна располагаться там, где игроку будет удобно её наблюдать в конкретной игре. А это зависит от многих вещей: визуального стиля, динамики игры, жанра, целевой аудитории (кто в игру играет), нагруженности интерфейса, как она сочетается и взаимодействует с другими элементам интерфейса и так далее.

    Что можно сделать:

    - Попробуйте представить как игрок будет взаимодействовать с игрой: где и в какое время будет находиться фокус его внимания. Скорее всего вы найдёте места/моменты на которых игрок «спотыкается» — на их оптимизацию и обращайте внимание.
    - Попробуйте поставить шкалу в разные места экрана и поиграть. Выберите наиболее удобный.
    Ответ написан
    Комментировать
  • Почему не пищит Beep?

    Zoominger
    @Zoominger
    System Integrator
    А сам-то бипер у вас есть?
    Ответ написан
    Комментировать
  • Где объявить поток, чтобы им можно было управлять из любого блока кода?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Объявите
    Thread UpdateThread;
    В любом модуле. А инициализацию
    UpdateThread = new Thread(CheckUpdate);
    Проведите там, где это нужно.
    Ответ написан
    Комментировать
  • Почему не удается передать строковой литерал в функцию, принимающую char*?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Все дело в том, что строковой литерал в C++ имеет константный тип.
    Когда ты делаешь вызов get_substr("один", "два три четыре"), ты в функцию передаешь два строковых литерала, тип которых - const char[ N ], где N - это длина строки литерала включая терминальный символ '\0'.
    Неявное преобразование типа из const char* в char* недопустимо, поэтому компилятор и пишет тебе ошибку.

    На самом деле, тебе в твоем тексте char* вообще не нужен, т.к. полностью все операции у тебя не приводят к изменению состояния строки. Заменить char* на const char* будет и логичнее, и понимаемость кода тоже улучшит.
    Ответ написан
    Комментировать
  • Перегрузка функций с unsigned параметром и обычным?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Стандартом определены правила вывода типа для числового литерала из самого литерала. Также в стандарте определен формат представления числового литерала.
    Согласно этим правилам и этому формату, 5 будет являться числовым литералом с типом int.
    Если бы ты написал 5u, то тип бы уже был unsigned int. А если бы ты написал 5lu, то тип бы уже был unsigned long int.
    Ответ написан
    Комментировать
  • Как раздать звук с Windows на Linux?

    Ezhyg
    @Ezhyg
    Воткни провод "оконеченный" с обеих сторон миниджеками 3,5, в компе - в выход, в ноуте - во вход.
    Ответ написан
    Комментировать
  • На каком языке написать игру с нуля?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    На любом, который позволит реализовать все ваши детально проработанные идеи и технические аспекты.
    Ответ написан
    5 комментариев
  • Фокус с делегатом. Как его исполнить?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    namespace DelegateDemo
    {
        public delegate string DemoDel(string s);
       
        class Program
        {  
            static void Main(string[] args)
            {
                ParamMethod(DelLink); // передача ссылки на метод DelLink в ParamMethod
                ParamMethod(s => "(" + s + ")"); // передача анонимной функции в ParamMethod
                Console.ReadKey();
            }
    
            static bool ParamMethod(DemoDel d)
            {
                if(d("что угодно") == "2")
                {
                    Console.WriteLine("делегат вернул 2");
                }
                if(d("5") == "(5)" && d("100500") == "(100500)")
                {
                    Console.WriteLine("делегат обернул число в скобки");
                }
            }
            static string DelLink(string s)
            {
                return "2";
            }
        }
    }
    Ответ написан
    3 комментария
  • Нужно ли разработчику ПО на .NET знать внутреннее устройство сборщика мусора?

    ApeCoder
    @ApeCoder
    Если разработчик хочет писать высоконагруженные приложения, то знание внутренностей сборщика мусора ему поможет: он сможет писать код так чтобы он потреблял меньше памяти, меньше времени проводил за сборкой мусора. Ещё он сможет быстрее анализировать причины низкой производительности или слишком высокого потребления памяти.
    Ответ написан
    Комментировать
  • Нужно ли разработчику ПО на .NET знать внутреннее устройство сборщика мусора?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Внутреннее устройство знать не нужно, но понимание деталей работы позволяет писать приложения, которые активно используют память, и оптимизировать скорость работы.

    Если у вас накопилось неиспользуемых областей памяти, сборщик мусора в какой-то момент решит их подчистить. И это может вызвать серьезную задержку в работе приложения. Собственно поэтому и неплохо понимать как он работает.
    Ответ написан
    5 комментариев
  • Почему "" != "" ??

    @distrik
    Programador
    Оператор == в случае с объектами сравнивает ссылки. При создании строк с одинаковым значением нет гарантии, что это окажется один и тот же объект, а значит они могут иметь разные ссылки.
    Для сравнения объектов принято испольховать оператор equals.
    Так же, строки можно сравнить через ==, если сравнивать не сами объекты, а результаты их интернирования:
    str1.intern() == str2.intern()
    И все же, имхо, лучше использовать equals()
    Ответ написан
    Комментировать
  • Почему "" != "" ??

    @Neonoviiwolf
    Flutter developer
    строки так не сравнивают, нужен "equals()"
    Ответ написан
    Комментировать
  • Почему "" != "" ??

    @Strannyk
    В Java строки являются объектами, а объекты равны между собой, только если это один и тот же объект. Для сравнивания строк используйте метод equals.
    Ответ написан
    Комментировать
  • C#. Как правильно получить список файлов из папки в нужном порядке?

    @kttotto
    пофиг на чем писать
    То, как Вы видите файлы в папке, сортирует проводник и вовсе не говорит о том, как они хранятся или в каком порядке добавлялись в папку. Если хотите увидеть в том же порядке, что и в проводнике, то и результат сортируйте по тем же параметрам
    testFiles.OrderBy(f => f.Name)
    Ответ написан
    Комментировать
  • Оцените код. Как можно заменить goto?

    GavriKos
    @GavriKos
    Вместо goto check можно сразу написать return 0.
    Вместо mark вариантов несколько. Если правильно понял - можно весь остальной код цикла засунуть в else и все.

    Попробуйте нарисовать блок-схему, может понятнее будет )
    Ответ написан
    Комментировать
  • Оцените код. Как можно заменить goto?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    while (size <=0)//проверка ввода
            goto check;//в случае неудачи, переход по метке check на 40 строку

    это
    if (size <= 0)
        break;


    goto mark;

    это просто continue; в первом случае и просто ничего во втором.
    Ответ написан
    Комментировать
  • Почему программа работает неправильно?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему я неправильно ссылаюсь к указателю в структуре?
    zmienna_strukt.a=NULL;
    ...
    scanf("%s", wsk->a);

    Ссылаешься правильно, но указатель указывает в NULL. Читать туда scanf'ом нельзя. Чтобы можно было читать -- надо чтобы указатель указывал в выделенную память достаточного размера. Например так:
    struct morgan zmienna_strukt;
        struct morgan *wsk;
        unsigned char buf[100];
    
        wsk=&zmienna_strukt;
    
        printf("Впиши значение: ");
        fflush(stdout);
        scanf("%d", &zmienna_strukt.b);
        printf("%d \n\n", zmienna_strukt.b);
    
        zmienna_strukt.a=buf;
        buf[0] = 0;
        printf("%s \n\n", zmienna_strukt.a);
    
        printf("Впиши значение: ");
        fflush(stdout);
        scanf("%s", wsk->a);
        printf("%s \n\n", wsk->a);
    Ответ написан
    1 комментарий
  • Как переименовать затем переместить файл?

    petermzg
    @petermzg
    Самый лучший программист
    File.Move
    Сразу перемещает и переименовывает.
    Ответ написан
    Комментировать