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

    +132

    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
    void calendar(int year){
        int i, j, k, frst=1, week, length, day = 0;
        printf("                               ");
        if(year < 1000) printf(" ");
        printf("%d\n\n", year);
        int first[3];   // число начала недели (первая неделя - любой день недели, следющие - понедельник)
        for(i = 1; i <= 4; ++i){
            print_tetral(i);
            first[1] = weekday(1, 1, 1, 1, 1, i*3-2, year);
            first[2] = weekday(1, 1, 1, 1, 1, i*3-1, year);
            first[3] = weekday(1, 1, 1, 1, 1, i*3, year);
            length = max(weeks_in_month(i*3-2, year), \
                         weeks_in_month(i*3-1, year), \
                         weeks_in_month(i*3, year));
            for(week = 0; week < length; ++week){
                for(j = 1; j <= 3; ++j){
                    frst = first[j];
                    if(week > 0) frst = 1;
                    if(week == 0)
                        for(k = 1; k < first[j]; ++k)
                            printf("   ");
                    k = frst;
                    day = 0;
                    while(k <= 7 && day < days_in_month(i*3-3+j, year) && week < weeks_in_month(i*3-3+j, year)){
                        day = 7*week + k - first[j] + 1;
                        if(day > days_in_month(i*3-3+j, year)) break;
                        if(day < 10) printf(" %d ", day);
                        else if(day >= 10) printf("%d ", day);
                        ++k;
                    }
                    if(week == length - 1 || day >= days_in_month(i*3-3+j, year))
                        for(; k <= 7; ++k)
                            printf("   ");
                    printf("  ");
                }
                printf("\n");
            }
            printf("\n");
        }
    }

    Печатаем календарь.

    alobanov, 16 Марта 2015

    Комментарии (2)
  2. Си / Говнокод #17799

    +130

    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
    int days_in_month(int month, int year){
        if(month == 2){
            if(is_leap_year(year)) return 29;
            else return 28;
        }
        if(month < 8){
            if(month % 2 == 1) return 31;
            else return 30;
        }
        if(month > 7){
            if(month % 2 == 1) return 30;
            else return 31;
        }
        return 0;
    }

    Количество дней в месяце. Моя первая кучка. Не судите строго ^_^

    alobanov, 16 Марта 2015

    Комментарии (13)
  3. Си / Говнокод #17787

    +136

    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
    printf("Enter item code: ");                                        //Prompts user
    scanf ("%14s", codenew1);                                           //Read user input
    len = strlen(codenew1);                                             //Read each character into variable len
    
    while (len != strspn(codenew1, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"))
    {
        printf ("Name contains non-alphabet characters. Try again!: "); //Prompts user to try again
        scanf ("%14s", codenew1);                                       //Reads user input
        len = strlen(codenew1);                                         //Read each character into variable len
    }                                                                   //Endwhile
    strncpy(codenew, codenew1,2);                                       //Copy the first two characters from the variable codenew1
    codenew[2] = 0;                                                     //Store first two characters into variavle codenew
    
    for ( j = 0; j < num_items; j++)                                    //Loop for num_items times
    {                                                                   //Beginning of for loop
        if (strcmp(array[j].code1, codenew) == 0)                       //If codenew is found in file
        {                                                               //Beginning of if statement
            price[i] = item_qty[i] * array[j].price1;                   //Calculating the price of an item
            printf("Price : %d", price[i]);                             //Prints price
            printf("\nEnter '%s' to confirm: ", array[j].itemname1);    //Confirming the item
            scanf("%19s", item_name1[i]);
            while (strcmp(item_name1[i], array[j].itemname1 )!=0)       //Looping until both item names are the same
            {                                                           //Begin while loop
                printf("Item name is not %s ,Try Again!: ", array[j].itemname1);    //Prompt user to try again
                scanf ("%19s", item_name1[i]);                              //Reads item name into an array
                len = strlen(item_name1[i]);                                //Reads each character into variable len
            }                                                               //End while loop
            len = strlen(item_name1[i]);                                    //Read each character into variable len
            while (len != strspn(item_name1[i], "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"))    //While len contains non alphabetic characters
            {                                                                       //Beginning while
                printf ("Name contains non-alphabet characters. Try again!: ");     //Prompts user to try again
                scanf ("%19s", item_name1[i]);                                      //Read user input
                len = strlen(item_name1[i]);                                        //Read each character into variable len
            }                                                                       //End while
            strncpy(item_name[i], item_name1[i], 20);                               //Copy the first two characters from the variable codenew1
            item_name[i][20] = 0;                                                   //Store first 20 characters in variable item_name[i]
            total_price+= price[i];                                     //Calculate total price
            break;                                                      //Terminates loop
        }                                                               //End of if statement
        else 
            if (strcmp(array[j].code1, codenew) != 0)                       //If codenew is found in file
            {
                printf("Invalid input! Try again.");
                goto Here;
            }
    }                                                           //End of for loop

    Бесценные комментарии!
    http://stackoverflow.com/questions/29045067/error-check-files

    myaut, 14 Марта 2015

    Комментарии (34)
  4. Си / Говнокод #17771

    +128

    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
    #include <stdio.h>
    int main()
    {
    int i,g;
    char a[26];
    a[0]='a';
    a[1]='b';
    a[2]='c';
    a[3]='d';
    a[4]='e';
    a[5]='f';
    a[6]='g';
    a[7]='h';
    a[8]='i';
    a[9]='j';
    a[10]='k';
    a[11]='l';
    a[12]='m';
    a[13]='n';
    a[14]='o';
    a[15]='p';
    a[16]='q';
    a[17]='r';
    a[18]='s';
    a[19]='t';
    a[20]='u';
    a[21]='v';
    a[22]='w';
    a[23]='x';
    a[24]='y';
    a[25]='z';
    for(i=0;i<25;i++)
    {
    for(g=0;g<i+1;g++)
    {
    printf("%c",a[g]);
    }
    if(g!=25)
    printf("\n");
    
    }
    return 0;
    }

    К предыдущему коду.

    alexmir, 12 Марта 2015

    Комментарии (0)
  5. Си / Говнокод #17770

    +145

    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
    #include <stdio.h>
    int main (void)
    {
    printf("a");
    printf("\n");
    printf("ab");
    printf("\n");
    printf("abc");
    printf("\n");
    printf("abcd");
    printf("\n");
    printf("abcde");
    printf("\n");
    printf("abcdef");
    printf("\n");
    printf("abcdefg");
    printf("\n");
    printf("abcdefgh");
    printf("\n");
    printf("abcdefghi");
    printf("\n");
    printf("abcdefghig");
    printf("\n");
    printf("abcdefghigk");
    printf("\n");
    printf("abcdefghigkl");
    printf("\n");
    printf("abcdefghigklm");
    printf("\n");
    printf("abcdefghigklmn");
    printf("\n");
    printf("abcdefghigklmno");
    printf("\n");
    printf("abcdefghigklmnop");
    printf("\n");
    printf("abcdefghigklmnopq");
    printf("\n");
    printf("abcdefghigklmnopqr");
    printf("\n");
    printf("abcdefghigklmnopqrs");
    printf("\n");
    printf("abcdefghigklmnopqrst");
    printf("\n");
    printf("abcdefghigklmnopqrstu");
    printf("\n");
    printf("abcdefghigklmnopqrstuv");
    printf("\n");
    printf("abcdefghigklmnopqrstuvw");
    printf("\n");
    printf("abcdefghigklmnopqrstuvwx");
    printf("\n");
    printf("abcdefghigklmnopqrstuvwxy");
    printf("\n");
    printf("abcdefghigklmnopqrstuvwxyz");
    printf("\n");
    return 0;
    }

    alexmir, 12 Марта 2015

    Комментарии (10)
  6. Си / Говнокод #17767

    +135

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    #define   CONC_LINE(a)  CONC(a, __LINE__)
    #define   CONC(a, b)  __CONC(a, b)
    #define __CONC(a, b)  a##b
    // ...
    int CONC_LINE(name);

    Способ присовокупить к названию переменной номер строки, где её объявили.
    Объясните кто-нибудь, почему #define CONC_LINE (a) __CONC ( a, __LINE__ ) дает: name__LINE__?

    refactor, 11 Марта 2015

    Комментарии (11)
  7. Си / Говнокод #17766

    +145

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    /* */
            int fooBar() {
                /* do something */
    
    /* - */     return NULL;
    /* + */     return 0ULL;
            }

    > src/foobar.c:42:3: warning: return makes integer from pointer without a cast
    > return NULL;

    П О Ч И Н Е Н О

    Elvenfighter, 11 Марта 2015

    Комментарии (18)
  8. Си / Говнокод #17754

    +135

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    int overflow(const char *str)
    {
        char buf[9000];
        int res = atoi(buf);
        itoa(res, buf, 10);
        return strcmp(buf, str);
    }

    По мотивам #17745.

    gost, 09 Марта 2015

    Комментарии (3)
  9. Си / Говнокод #17748

    +134

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    UInt64 unpackSizeSpec =
            p->UnpackPositions[p->FolderStartFileIndex[folderIndex + 1]] -
            p->UnpackPositions[p->FolderStartFileIndex[folderIndex]];
        size_t unpackSize = (size_t)unpackSizeSpec;
    
        if (unpackSize != unpackSizeSpec)
          return SZ_ERROR_MEM;

    Из недр lzma sdk.
    По заверениям разработчиков:
    > ... может использоваться любым современным 32-битным процессором (или, при определенных условиях 16-битным CPU).
    Очевидно что этот код вернет SZ_ERROR_MEM на 32-разрядной платформе, если unpackSizeSpec выходит за границы 32-битного числа.
    На самом то деле все логично - пользователь просто посылается на хуй, если его нищебродское устройство не тянет такого толстого архива, но тогда утверждение разработчиков о безпроблемном использовании на любой кофеварке становится пиздежью.

    Pythoner, 08 Марта 2015

    Комментарии (2)
  10. Си / Говнокод #17745

    +138

    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
    typedef enum { SUCCESS = 0, NOTNUMBER = 1, BOUNDS = 2, EOFREACHED = 3 } rdstat_t;
    
    int flush_line(FILE *stream) {
      int ch;
      do {
        ch = fgetc(stream);
      } while (ch != EOF && ch != '\n');
      return ch;
    }
    
    /* enough to contain (1 + length of ASCII string of SIZE_MAX
       decimal representation) characters */
    #define SIZE_T_BUF_SIZE 100
    
    /* reads until newline or EOF, writes (size_t *out) if success */
    rdstat_t read_size_t(FILE *stream, size_t *out) {
      char str_SIZE_MAX[SIZE_T_BUF_SIZE];
      snprintf(str_SIZE_MAX, SIZE_T_BUF_SIZE, "%zu", SIZE_MAX);
     
      char buf[SIZE_T_BUF_SIZE];
      if (!fgets(buf, SIZE_T_BUF_SIZE, stream)) 
        return EOFREACHED;
      if (buf[strlen(buf) - 1] != '\n') {
        flush_line(stream);
        return NOTNUMBER;
      }
    
      buf[strlen(buf) - 1] = 0;
      char *ch;
      for (ch = buf; *ch; ++ch)
        if (!isdigit(*ch)) 
          return NOTNUMBER;
    
      if (strlen(buf) == strlen(str_SIZE_MAX) && strcmp(buf, str_SIZE_MAX) > 0) 
          return BOUNDS;
        
      sscanf(buf, "%zu", out);
      return SUCCESS;
    }

    Наваял функцию для чтения size_t из файла с защитой от дурака (писал код будучи больным, чесслово).
    Ничего умнее печати SIZE_MAX в строчку и лексикографического сравнения для проверки границ введенного числа не придумал %)

    vlitomsk, 06 Марта 2015

    Комментарии (26)