首先阐明规定:
0、1、2三个整数别离是剪刀石头布在程序中的外部示意,用户也要求输出0、1或2,而后和计算机随机生成的0、1或2比输赢,这个程序的主体是一个死循环,须要按Ctrl-C退出程序!
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { char gesture[3][10] = {"scissor", "stone","cloth"}; int man, computer, result, ret; srand(time(NULL)); while (1) { computer = rand() % 3; printf("\nInput your gesture (0-scissor 1 -stone 2 - cloth) :\n "); ret = scanf("%d", &man); if (ret != 1 || man < 0 || man > 2) { printf("Invalid input! Please input 0, 1 or 2.\n"); continue; } printf("Your gesture: %s\tComputer's gesture: % s\n ", gesture[man],gesture[computer]); result = (man - computer + 4) % 3 - 1; //此处为外围代码! if (result > 0) printf("You win!\n"); else if (result == 0) printf("Draw!\n"); else printf("You lose!\n"); } return 0; }
依据对result的输赢判断条件可知,当result(即咱们输出的和电脑随机生成的后果通过计算之后的后果)大于0,咱们赢,小于0,咱们输,等于0,打成平手!
那么(man - computer + 4) % 3 - 1这个神奇的表达式是如何管制比拟出0、1、2这三个数字在“剪刀石头布”意义上的大小和输赢的?凑的过程见上面表格:
具体执行后的后果见下图: