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

    +1

    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
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    //код компилируйте clang-ом, иначе не закомпилится
    int main(int argc, char *argv[])
    {
    	if(argc != 2) {
    		printf("Укажите способ (1,2)\n");
    		_exit(1);
    	}
    	int способ = atoi(argv[1]);
    	int ch;
    	switch(способ)
    	{
    		case 1:
    		{
    			while( (ch=getchar()) != EOF ) {
    				printf("%i", ch);
    			}
    			break;
    		}
    		case 2:
    		{
    			int twoch;
    			char arr[2];
    			int new;
    			while( (ch=getchar()) != EOF ) {
    				twoch = getchar();
    				if(twoch == EOF) break;
    				sprintf(arr, "%c%c", (char)ch, (char)twoch);
    				new = atoi(arr);
    				printf("%c", new); //попытка не пытка
    			}
    			break;
    		}
    		default:
    			printf("Неизвестный способ\n");
    	}
    	return 0;
    }

    без слов

    Запостил: KoderOT-Boga, 17 Октября 2017

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

    • cnoco6
      Ответить
    • wandbox не хочет компилить этот способ ни одним из clang'ов
      Ответить
    • > код компилируйте clang-ом, иначе не закомпилится
      Почему? Русские идентификаторы и unistd.h мешают?
      Ответить
      • Конпилить не пробовал, но может из-за переменной new?

        P.S. Ах да, где здесь C++, inho?
        Ответить
        • И правда, new. Пейсатель программы боялся гордо выстрелить себе в ногу и решил вместо этого опустить её в уксус с говном.
          Ответить
      • gcc не любит идентификаторы, содержащие символы за пределами базовой латиницы.
        Ответить
        • А целка от майкрсофт даже UTF-16 исходники компилирует, правда не знаю насколько это кому-то поможет.
          Ответить
          • Невероятно полезная фича для компилятора, который может выдать выхлоп в latin1 только если установить язык системы на английский, а для utf-8 вообще никак. Плюс, половина выхлопа: "Привет мы майкрософт вон тута клевый символ как с но в кружочке это типа ничего не значит в контексте выхлопа компилятора, кроме как засрать тебе диагностику"
            Ответить
            • что такое "язык системы"? Кодировка для однобайтовых программ в винде?
              Ответить
              • это "Панель управления - Язык и региональные стандарты - Дополнительно - Изменить язык системы"

                Другими словами, компилятор выдаст тебе latin1 только вместе со всеми остальными локализованными программами
                Ответить
                • Да, это и есть однобайтовые кодировки для "программ, не использующих unicode"
                  странно что cl таков
                  Ответить
                  • Для MS это не странно, а в порядке вещей.

                    У msbuild вообще кодировка выхлопа в каждой версии разная.

                    У некоторых утилит шапка выхлопа и основное сообщение могут быть в разных кодировках.
                    Ответить
                    • заебали кодировки, отличные от UTF-8.

                      Правда если msbuild пишет через CRTшные функции printf/wprintf то тогда понятно в чем проблема.
                      У MS эти функции конвертят аутпут в однобайтовую кодировку. Треба юзати WriteConsole.

                      Вообще заметил что у MS все CRT функции работают крайне хуёво.
                      Ответить
                      • > WriteConsole
                        Оно уже научилось в файл/пайп редиректиться?
                        Ответить
                        • можно подцепить хендлер к файлу (через SetStdHandle), но я боюсь что просто так не будет
                          Ответить

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