1. Си / Говнокод #4935

    +144

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    for (i=0; i<n1; i++)
            for (j=0; j<n; j++)
                for (l=0; l<m; l++)
                {
                    printf ("Введите в матрицу № %d строку №[%d][%d] \n", i+1,j+1,l+1);
                    while((h<k) && (*(*(*(*(mt+i)+j)+l)+h-1)!='\n'))                        //цикл для последовательного ввода всех элементов символьной строки;
                    {
                        fflush(stdin);
                        *(*(*(*(mt+i)+j)+l)+(h++)) = getchar();                                //ввод элемента символьной строки;
                    }
                        if (*(*(*(*(mt+i)+j)+l)+h-1)='\n')                                    //удаление из конца введённой строки символа переноса \n;
                        { *(*(*(*(mt+i)+j)+l)+h-1)='\0';}
                        else
                        { *(*(*(*(mt+i)+j)+l)+h)='\0';}
                        h = 0;
                }

    heil pure c

    Запостил: stasoft, 15 Декабря 2010

    Комментарии (23) RSS

    • Луна и Звезда! Этож сколько нужно было выпить?
      Ответить
    • fflush(stdin);
      Что это!?
      Ответить
      • Вызов функции fflush с аргументом stdin.
        Ответить
        • Я надеюсь, кэп пояснит почему здесь undefined behavior?
          Ответить
          • ого, я за этой зведотой и не заметил, крутой вызов
            Ответить
    • А зачем 4 звёздочки? Ну две - это матрица, три - это массив матриц, а 4я - это потому, что массив передали в функцию по указателю?
      Ответить
      • Ааа, это массив матриц строк...
        Ответить
        • Можно так же сказать "матрица матриц", или при соблюдении определённых условий (которые вряд ли тут соблюдаются) "тензор 4-го ранга". Но, IMHO, проще всего тупо сказать "4-мерный массив", а не "массив матриц строк". А это мне это напоминает детские фразы вроде "миллион миллионов миллиардов!".
          Ответить
          • Можно сказать 4 раза "разыменовение указателя". Или "4 звёздочки".
            Мне интересно, что по смыслу означает это нагромождение указателей. Я пытаюсь не смотреть тупо на синтаксис, а понять, что за ним стоит. Тебе не интересно - ну так не надо делать вывод, что я не знаю оператора "звёздочка".
            По смыслу это уже не матрица матриц.
            Строка номер 5 говорит именно о том, что это массив матриц строк. Вроде.
            Ответить
            • Если под "по смыслу" имеется в виду "практический смысл по задумке автора", то тогда ладно, убедили, за этот наезд извиняюсь.
              Ответить
              • Ну да, я об этом. Есть цель и средство. Средство (четверной указатель) и так видно, обсуждать его я не вижу смысла. Интересно понять цель. Об этом я и говорю тут.
                Ответить
      • Я иногда поражаюсь вашим комментариям. Такое ощущение, будто вы вообще никогда не писали на Си.

        Во-первых, 4 звёздочки лишь потому, что используется 4-мерный массив (КЭП). Достаточно лишь посмотреть в код, и в голове преобразовать *(*(*(*(mt+i)+j)+l)+h-1) в mt[i][j][l][h-1]... (что, кстати, будет более pure c, ибо на Си как указано в куске кода выше обычно не пишут)

        Во-вторых, по поводу фразы "массив передали в функцию по указателю" лишена смысла в данной ситуации, потому что это дополнительной звёздочки не даёт. Дополнительную звёздочку дало бы, если бы передавался указатель на указатель, т.к. работая с массивом уже изначально имеется указатель.
        Ответить
        • > Во-первых, 4 звёздочки лишь потому, что используется 4-мерный массив (КЭП).

          Ты думаешь, я это не понимаю? Ты бы ещё сказал, что это указатель на указатель на указатель на указатель.
          Я пытаюсь смысл понять.

          > Во-вторых, по поводу фразы "массив передали в функцию по указателю" лишена смысла в данной ситуации, потому что это дополнительной звёздочки не даёт.

          Если этот массив собираются менять внутри функции (увеличивать размер, например), то даёт.
          Ответить
          • > Если этот массив собираются менять внутри функции (увеличивать размер, например), то даёт.

            В случай, когда указатель на массив собираются менять, передают обычно указатель на указатель (ну или в некоторых частных случаях полуают новое значение через return). Вот тогда появляется дополнительная звёздочка. Кстати, веьсма очевидно, что тут ничего подобного не делается.

            У нас похоже с вами разная терминология. Для вас массив - это указатель на область, где имеется n-ое кол-во последовательных однородных элементов. А для меня массив - это собственно n-ое кол-во последовательных однородных элементов. Другими словами, я так понял, "ваш массив" - это указатель на "мой массив".

            http://ru.wikipedia.org/wiki/Массив
            Ответить
            • > Для вас массив - это указатель на область, где имеется n-ое кол-во последовательных однородных элементов.

              Да, в данном случае я понимаю массив именно так. Ритчи понимал его примерно так же.
              Ответить
        • > иногда поражаюсь...будто вы вообще никогда не писали на Си
          написать-то не проблема, вот потом обратно прочитать, это да
          Ответить

    Добавить комментарий