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

    +135

    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
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    main(){    
        
        FILE *filein, *fileout;
        
        char fname1[15], fname2[15];
        int n, m;
        int i, j;
        
        printf("Enter name of input file: "); scanf("%s", &fname1);
        printf("Enter name of output file: "); scanf("%s", &fname2);
        
        filein=fopen(fname1, "r");
        fileout=fopen(fname2, "w");
        if(filein==NULL){
          fprintf(stderr, "\nError: can't open file \"%s\"\n\n", fname1);
          fclose(filein);
          fclose(fileout);
          getch();
          }
        else{
             fscanf(filein, "%d%d", &n, &m);
             char ch[m][n];
             int array[m][n];
             int V[m][n];
             
             for(i=0;i<m;i++){
                for(j=0;j<n;j++){
                   V[i][j]=0;
                   }
                }
             
             for(i=0;i<m;i++){
                for(j=0;j<n;j++){
                   fscanf(filein, "%s", &ch[i][j]);
                   if(ch[i][j]=='+') array[i][j]=1;
                   else if(ch[i][j]=='-') array[i][j]=0;
                   }
                }
             
             int sum;
             for(i=0;i<m;i++){
                sum=0;
                for(j=0;j<n;j++){
                   sum+=array[i][j];
                   }
                   if(sum==1){
                             for(j=0;j<n;j++){
                                V[i][j]=array[i][j];
                                }
                             }
                   else continue;
                }
                
             int mm=0, c;
             for(i=0;i<m;i++){
                for(j=0;j<n;j++){
                   mm+=V[i][j];
                   }
                }
             c = m-mm;
             
             int VoteArray[n];
             
             for(j=0;j<n;j++){
                sum=0;
                for(i=0;i<m;i++){
                   sum+=V[i][j];
                   VoteArray[j]=sum;
                   }
                }
             
             float percent[n];
             float per;
             per = 100/(float)c;
             for(i=0;i<n;i++){
                
                if((percent[i]=per*VoteArray[i])>=7.0) fprintf(fileout, "%d ", i+1);
                }
                
             }
        
        fclose(fileout);
        fclose(filein);
        puts("\nMission comleted\nPress any key...\n");
        getch();
    }

    Фу, блять

    Запостил: Sushev, 09 Ноября 2014

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

    • Похоже на школьный код. Кстати, по нему видно что спагетти можно и без гоуту.
      Ответить
    • Наслаждайтесь!

      http://bit.ly/1uOJggG
      bit . ly / 1uOJggG
      aHR0cDovL2JpdC5seS8xdU9KZ2dH
      Ответить
    • > main(){

      Вот за это расстреливать сразу, без суда и следствия.
      Ответить
      • Зато четыре байта сэкономили!
        Ответить
      • Почему?
        Ответить
        • Потому что не указан тип результата функции. Опа, K&R-style, когда int подразумевается, но умалчивается.
          Ответить
          • Ээ, а на это ide/анализаторы не матерятся?
            Ответить
            • ругаюца
              [0002][XXX@XXX:~]$ cc 1.c -Wall
              1.c:3: warning: return type defaults to 'int'
              1.c: In function 'main':
              Ответить
        • Потому что сишная говнофича - инт по умолчанию, если не указан никакой тип.
          Ответить
          • Вот когда ещё был вывод типов!
            Ответить
            • Ну вывод типов если что появился до того, как появился Си, но реализован в (относительно) популярном языке был примерно одновременно с Си / на пару лет позже.
              Ответить
      • А вот теперь-то под суд можно и попасть
        Ответить
    • char fname1[15], fname2[15];
      ...
      scanf("%s", &fname1);

      Ой!
      Ответить
      • Согласен. Сишные строки с завершающим нулём не нужны. То ли дело Паскаль, где у строк есть поле, сообщающее длину.
        Ответить
      • ))наверное это 8 + 3 + точка + чуток прозапас + надежда на то что юзер -- человек порядочный, и слишком длинные имена файлов вводить не будет
        Ответить
        • А scanfn чё, нема?
          Я ваще не врубаюсь в смысл функций, не принимающих ограничение на длину. Это ж бомба. И главный объект фапа школоло-кулхацкеров - однострочник while (*d++=*s++) - тоже этим страдает и поэтому является бессмысленной на практике хренью.
          Ответить
          • Ну может быть scanfn они еще не проходили.

            >> смысл функций, не принимающих ограничение на длину.
            Да никогда практически они не нужны, и уж тем более в случае общения с пользователем. Это плевок из 70х, как мне кажется.

            Вообще позволить пользовательским данным вылезти за пределы выделенной памяти это стыдно. Так же стыдно как Sql Injection, например: казалось-бы ОЧЕВИДНО как этого избегать, но всё равно находятся такие вот деятели>
            Ответить
          • > объект фапа школоло-кулхацкеров - однострочник while (*d++=*s++) - тоже этим страдает и поэтому является бессмысленной на практике хренью

            while (n-- && (*d++=*s++)) как strncpy или
            while (*d++=*s++*!!--n), проставляющее ноль.
            Второе даже ещё волшебнее смотрится, чем сухое while (*d++=*s++)
            Ответить
            • я бы записал так:
              for(int i=0; i<n; ++i)
              {
                d[i]=s[i];
                if (!d[i])
                  break;
              }

              но это слишком серо смотрится
              Ответить

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