diff --git a/du3/program.c b/du3/program.c index ab937ce..a51a008 100644 --- a/du3/program.c +++ b/du3/program.c @@ -1,68 +1,74 @@ + #include #include #include #include int main() { - char* input = (char*) calloc(11, sizeof(char)); - char numbers[4]; + char* input = (char*) calloc(11, sizeof(char)); + char numbers[4]; char* ptr; - int date[3] = {0,0,0}; - int counter1 = 0, counter2 = 0; - - int truth = 0; - - for(int j = 0; fgets(input, 11, stdin) != NULL; j++){ - for(int i = 0; i < 11; i++){ - if(!isdigit(input[i]) && input[i] != '.' && input[i] != '\0' && input[i] != '\n'){ - goto LABEL; - truth = 1; - } - if(input[i] != '.' && input[i] != '\n' && input[i] != '\0'){ - numbers[counter1++] = input[i]; - } - else { - date[counter2++] = (int)strtol(numbers, &ptr, 10); - if((counter2 == 1 && (date[0] < 1 || date[0] > 31)) || (counter2 == 2 && (date[1] < 1 || date[1] > 12)) || (counter2 == 2 && date[0] > 29)){ - //goto LABEL; + int date[3] = {0, 0, 0}; + int counter1 = 0, counter2 = 0; + + int truth = 0; + +for (int j = 0; fgets(input, 11, stdin) != NULL; j++){ + for(int i = 0; i < 11; i++){ + if(!isdigit(input[i]) && input[i] != '.' && input[i] != '\0' && input[i] != '\n'){ + goto LABEL; + } + + if(input[i] != '.' && input[i] != '\n' && input[i] != '\0'){ + numbers[counter1++] = input[i]; + } + else { + date[counter2++] = (int) strtol(numbers, &ptr, 10); + if(counter2 == 1 && (date[0] < 1 || date[0] > 31)){ + goto LABEL; + } + else if(counter2 == 2 && (date[1] < 1 || date[1] > 12)){ + goto LABEL; + } + else if(counter2 == 2 && date[0] > 29){ + goto LABEL; + } + else if (counter2 == 3){ + date[0] += 7; + if(date[0] > 31 && (date[1] == 1 || date[1] == 3 || date[1] == 5 || date[1] == 7 || date[1] == 8 || date[1] == 10 || date[1] == 12)){ + date[0] -= 31; + date[1]++; + if(date[1] > 12){ + date[1] = 1; + date[2]++; + } + } + if(date[0] > 30 && (date[1] == 4 || date[1] == 6 || date[1] == 9 || date[1] == 11)){ + date[0] -= 30; + date[1]++; } - else if (counter2 == 3){ - date[0] += 7; - if(date[0] > 31 && (date[1] == 1 || date[1] == 3 || date[1] == 5 || date[1] == 7 || date[1] == 8 || date[1] == 10 || date[1] == 12)){ - date[0] -= 31; - date[1]++; - if(date[1] > 12){ - date[1] = 1; - date[2]++; - } - } - if(date[0] > 30 && (date[1] == 4 || date[1] == 6 || date[1] == 9 || date[1] == 11)){ - date[0] -= 30; - date[1]++; - } - if(date[0] > 29 && date[1] == 2 && date[2] % 4 == 0 && (date[2] % 100 != 0 || (date[2] %100 == 0 && date[2] % 400 == 0))){ - date[0] -= 29; - date[1]++; - } - else if(date[0] > 28 && date[1] == 2){ - date[0] -= 28; - date[1]++; - } - //date[2] /= 100; - printf("%d.%d.%d\n\n", date[0], date[1], date[2]); - break; - } - counter1 = 0; - memset(numbers, '\0', 4); - } - } - memset(input, '\0', 11); - date[0] = 0, date[1] = 0, date[2] = 0; - counter1 = 0, counter2 = 0; - memset(numbers, '\0', 4); - } - - LABEL: - if(truth) puts("Neplatny datum"); - return 0; + if(date[0] > 29 && date[1] == 2 && date[2] % 4 == 0 && (date[2] % 100 != 0 || (date[2] %100 == 0 && date[2] % 400 == 0))){ + date[0] -= 29; + date[1]++; + } + else if(date[0] > 28 && date[1] == 2){ + date[0] -= 28; + date[1]++; + } + printf("%d.%d.%d\n\n", date[0], date[1], date[2]); + break; + } + memset(numbers, '\0', 4); + counter1 = 0; + } + } + memset(input, '\0', 11); + date[0] = 0, date[1] = 0, date[2] = 0; + counter1 = 0, counter2 = 0; + memset(numbers, '\0', 4); +} + LABEL: + if(truth) puts("Neplatny datum"); + + return 0; } \ No newline at end of file