30
Июн
2022

Моя проблема заключается с размером цифр в мини игре My_Mastermind

можете мне помочь с размером цифр, например когда я ввожу 01234 то все работает как бы должно быть, а так не должно быть, лимит цифр должен быть в пределах четырех

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
typedef struct s_mastermind {
    int my_attempt;
    char* my_code;
} my_mastermind;

my_mastermind* settings_function(my_mastermind* mastermind, int argc, char** argv);
int checking_for_correctness_num(char* _string);
int wrong_input(int progress,char* num_code);
my_mastermind* my_function();
int check_function(char* string);
char* input_function();
int mis_placed_pieces(char* bit, char* num_code);
int well_placed_pieces(char* bit, char* num_code);
int code_checker(char* bit, char* num_code);
char* size_of_function(char* strye);

char* my_strcpy(char* num1, char* num2) {
   for(int i = 0; num2[i] != 0; i++) {
       num1[i] = num2[i];
   }
   return num1;
}

int my_strlen(char* num1) {
    return (*num1) ? my_strlen(++num1) + 1 : 0;
}



my_mastermind* my_function() {
    my_mastermind* num = malloc(sizeof(my_mastermind));
    num->my_code = malloc(5);
    num->my_code[4] = '\0';
    my_strcpy(num->my_code, "");
    num->my_attempt = 10;
    return num;
}




my_mastermind* settings_function(my_mastermind* mastermind, int argc, char** argv) {
            char* bit;
            for(int i = 0; i < argc;) {
        if (my_strlen(argv[i]) == 2 && argv[i][0] == '-') {
            if(argv[i][1] == 'c') {
                char* num_code = argv[i + 1];
                if(wrong_input(argc,num_code) != 0) {
                    break;
                }
                my_strcpy(mastermind->my_code, num_code);
            }else if(argv[i][1] == 't') {
                if(checking_for_correctness_num(argv[i + 1]) == 0) {
                    mastermind->my_attempt = check_function(argv[i + 1]);
                }
            } else {
                printf("WRONG FLAG RESTART THE GAME!!!\n");
            }
        }
        i += 1;
    }
    return mastermind;
}





int wrong_input(int progress,char* num_code) {
    // if(my_strlen(num_code) != 4) {
    //     printf("Code bigger than 4\n");
    // }
    if(checking_for_correctness_num(num_code) == 1) {
        printf("Wrong input!\n> ");
        fflush(stdout);
        char* code = input_function();
        char* variable = size_of_function(code);
        free(code);
        int results = 1;
        if(wrong_input(progress,variable) == 0) {
            results = code_checker(num_code, variable);
        }
        free(variable);
        return results;
        } 
        return 0;
}


int checking_for_correctness_num(char* _string) {
    for(int i = 0; _string[i] != '\0'; i++) {
        if(!(_string[i] >= '0' && _string[i] <= '9')) {
            return 1;
        }
    }
    return 0;
}



int check_function(char* string) {
    int check_num = 0;
    for(int i = 0; string[i] != '\0'; i++) {
        check_num = check_num * 10 + (string[i] - '0');
    }
    return check_num;
}

char* input_function() {
    char* getting = malloc(101);
    getting[100] = '\0';
    read(0, getting, 100);
    fflush(stdout);
    return getting;
}

int game_progress(int progress, char* bit) {
    printf("Round: %d\n> ", progress);
    fflush(stdout);
    char* code = input_function();
    char* variable = size_of_function(code);
    free(code);
    int results = 1;
    if(wrong_input(progress,variable) == 0) {
         results = code_checker(bit, variable);
    }
    free(variable);
    return results;
}


void game_action(my_mastermind* mastermind) {
    int current_try = 0;
     for (;current_try < mastermind->my_attempt;) {
       int results = game_progress(current_try, mastermind->my_code);
        current_try += 1;
        

        if(results == 0) {
            printf("Congratz! You did it!\n");
            break;
        }
    }
    
}


int code_checker(char* bit, char* num_code) {
    int good_w = well_placed_pieces(bit, num_code);
    int not_good_m = mis_placed_pieces(bit, num_code);
    if(good_w == 3 || good_w == 2 || good_w == 1 || not_good_m == 3 || not_good_m == 2 || not_good_m == 1){
    printf("Well placed pieces: %d\nMisplaced pieces: %d\n---\n", good_w,not_good_m);    
    }


    if(good_w == 4) {
        return 0;
    } else {
        return 1;
    }
}


int well_placed_pieces(char* bit, char* num_code) {
    int number = 0;
    for(int i = 0; i < 4; i++) {
        if (bit[i] == num_code[i]) {
            number += 1;
        } 
    }
    return number;
    
}

int mis_placed_pieces(char* bit, char* num_code) {
     int number = 0;
    int i = 0;
    int j = 0;
    while(i < 4) {
        i++;
        if (bit[i] == num_code[i]) {
            number += 1;
        }
    }
    return number;
    
}

char* size_of_function(char* strye) {
    char* new_string = malloc(5);
    new_string[4] = '\0';
    for(int i = 0; i < 4;i++){
        new_string[i] = strye[i];
    }
    return new_string;
}

int main(int argc, char** argv) {
    printf("Will you find the secret code?\n---\n");
    my_mastermind* mastermind = my_function();
    settings_function(mastermind, argc, argv);
    game_action(mastermind);
    free(mastermind);


    return 0;
}

Источник: https://ru.stackoverflow.com/questions/1425456/%D0%9C%D0%BE%D1%8F-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D1%82%D1%81%D1%8F-%D1%81-%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BE%D0%BC-%D1%86%D0%B8%D1%84%D1%80-%D0%B2-%D0%BC%D0%B8%D0%BD%D0%B8-%D0%B8%D0%B3%D1%80%D0%B5-my-mastermind

Тебе может это понравится...

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