Проблема языка Си с возвратом функции
Привет всем! У меня есть небольшая проблема в с.
Весь мой код приведен ниже: (это игра, известная как камень-ножницы-карандаш-бумага)
Код:
Что я уже пробовал:
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> char* CPU_random_choice(char **cpu_array); int player_input(); int check_hand_in_array(char **array , char *input); int increase_score(int *score); void result(int *for_CPU , int *for_player); void win(char **array , char *player_hand , char *cpu_hand , int *CPU_score , int *player_score); int main(void) { int CPU_score = 0; int player_score = 0; char *Hands[4] = {"Rock" , "Scissor" , "Pencil" , "Paper"}; result(&CPU_score , &player_score); char *cpu_choice = CPU_random_choice(Hands); printf("\nCPU hand: %s\n\n" , cpu_choice); int player_hand = player_input(); printf("\nPlayer hand: %s\n" , Hands[player_hand - 1]); win(Hands , Hands[player_hand - 1] , cpu_choice , &CPU_score , &player_score); printf("\n\n"); result(&CPU_score , &player_score); } char* CPU_random_choice(char **cpu_array) { srand(time(NULL)); int i = rand() % 4; return cpu_array[i]; } int player_input() { printf("1: Rock\n2: Scissor\n3: Pencil\n4: Paper\n"); printf("Player give a hand: "); int player_hand; scanf("%d" , &player_hand); do { if(player_hand < 0 && player_hand > 4) { printf("Invalid hand...\nTry again: "); scanf("%d" , &player_hand); } } while(player_hand < 0 && player_hand > 4); return player_hand; } void result(int *for_CPU , int *for_player) { printf("PLAYER - CPU\n==============\n"); printf(" %d\t %d\n" , *for_CPU , *for_player); } int increase_score(int *score) { return (*score)++; } void win(char **array , char *player_hand , char *cpu_hand , int *CPU_score , int *player_score) { if((strcmp(player_hand , CPU_random_choice(array))) == 0) { printf("Draw!"); } else if(strcmp(player_hand , "Rock") == 0 && (strcmp(CPU_random_choice(array) , "Scissor") || strcmp(CPU_random_choice(array) , "Pencil")) == 0) { printf("Player wins!"); increase_score(player_score); } else if(strcmp(CPU_random_choice(array) , "Rock") == 0 && (strcmp(player_hand , "Scissor") || strcmp(player_hand , "Pencil")) == 0) { printf("CPU wins!"); increase_score(CPU_score); } else if(strcmp(player_hand , "Rock") == 0 && strcmp(CPU_random_choice(array) , "Paper") == 0) { printf("CPU wins!"); increase_score(CPU_score); } else if(strcmp(CPU_random_choice(array) , "Rock") == 0 && strcmp(player_hand , "Paper") == 0) { printf("Player wins!"); increase_score(player_score); } else if(strcmp(player_hand , "Scissor") == 0 && strcmp(CPU_random_choice(array) , "Rock") == 0) { printf("CPU wins!"); increase_score(CPU_score); } else if(strcmp(CPU_random_choice(array) , "Scissor") == 0 && strcmp(player_hand , "Rock") == 0) { printf("Player wins!"); increase_score(player_score); } else if(strcmp(player_hand , "Scissor") == 0 && (strcmp(CPU_random_choice(array) , "Pencil") || strcmp(CPU_random_choice(array) , "Paper")) == 0) { printf("Player wins!"); increase_score(player_score); } else if(strcmp(CPU_random_choice(array) , "Scissor") == 0 && (strcmp(player_hand , "Pencil") || strcmp(player_hand , "Paper")) == 0) { printf("CPU wins!"); increase_score(CPU_score); } else if(strcmp(player_hand , "Pencil") == 0 && (strcmp(CPU_random_choice(array) , "Rock") || strcmp(CPU_random_choice(array) , "Scissor")) == 0) { printf("CPU wins!"); increase_score(CPU_score); } else if(strcmp(CPU_random_choice(array) , "Pencil") == 0 && (strcmp(player_hand , "Rock") || strcmp(player_hand , "Scissor")) == 0) { printf("Player wins!"); increase_score(player_score); } else if(strcmp(player_hand , "Paper") == 0 && (strcmp(CPU_random_choice(array) , "Pencil") || strcmp(CPU_random_choice(array) , "Scissor")) == 0) { printf("CPU wins!"); increase_score(CPU_score); } else if(strcmp(CPU_random_choice(array) , "Paper") == 0 && (strcmp(player_hand , "Pencil") || strcmp(player_hand , "Scissor")) == 0) { printf("Player wins!"); increase_score(player_score); } else if(strcmp(player_hand , "Paper") == 0 && strcmp(CPU_random_choice(array) , "Rock") == 0) { printf("Player wins!"); increase_score(player_score); } else if(strcmp(CPU_random_choice(array) , "Paper") == 0 && strcmp(player_hand , "Rock") == 0) { printf("CPU wins!"); increase_score(CPU_score); } else if(strcmp(player_hand , "Pencil") == 0 && strcmp(CPU_random_choice(array) , "Paper") == 0) { printf("Player wins!"); increase_score(player_score); } else if(strcmp(CPU_random_choice(array) , "Pencil") == 0 && strcmp(player_hand , "Paper") == 0) { printf("CPU wins!"); increase_score(CPU_score); } }
Я исправил предыдущую проблему,которая у меня была с другим способом ,но теперь моя проблема заключается в том,что программа не возвращает правильное решение(победитель) и не увеличивает счет победителя(иногда это происходит, иногда увеличивает счет проигравшего, иногда ничего не делает).Я не знаю, что происходит...
Мне нужна твоя помощь...
Спасибо!!!
KarstenK
Оригинал Грифф прав. Всегда помните: компилятор-единственный друг в программировании, который говорит вам: "не делай этого, потому что у тебя будут проблемы" ;-)
Richard MacCutchan
Опубликованный вами код не соответствует показанному сообщению об ошибке.
Nick_is_asking
Я только что загрузил весь код.Посмотри. Спасибо!!
Richard MacCutchan
Это время для вас, чтобы сделать некоторые отладки и научиться решать проблемы для себя. Установите точку останова в коде, запустите отладчик и пройдите через него, проверяя различные переменные в каждом операторе. Таким образом, вы узнаете гораздо больше, чем просто принимая наши решения.
Richard MacCutchan
if(player_hand < 0 && player_hand > 4)
Целочисленное значение не может быть меньше нуля и больше, чем 4 в то же время.