示例:掷骰子

作者:追风剑情 发布于:2020-1-18 17:07 分类:C

示例:

diceroll.h


#pragma once
extern int roll_count; //引用式声明
int roll_n_dice(int dice, int sides);


diceroll.c


/* 引入标准头文件用<>,引入本地头文件用"" */
#include "diceroll.h"
#include <stdio.h>
/* 提供库函数rand()的原型 */
#include <stdlib.h>

int roll_count = 0; /* 定义式声明,外部链接 */

/* 该函数属于该文件私有 */
static int rollem(int sides)
{
	int roll;
	roll = rand() % sides + 1;
	++roll_count; /* 计算函数调用次数 */
}

int roll_n_dice(int dice, int sides)
{
	int d;
	int total = 0;
	if (sides < 2)
	{
		printf("Need at least 2 sides.\n");
		return -2;
	}
	if (dice < 1)
	{
		printf("Need at least 1 die.\n");
		return -1;
	}

	for (d = 0; d < dice; d++)
		total += rollem(sides);

	return total;
}


Main.c

//Visual Studio中加上这句才可以使用scanf()
//否则只能使用scanf_s()
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//malloc()、free()
#include <stdlib.h>
#include <time.h>
#include "diceroll.h"

//argc: 参数个数 argv[]: 参数数组
//int main(int argc, char **argv)
int main(int argc, char *argv[])
{
	int dice, roll;
	int sides;
	int status;
	
	srand((unsigned int) time(0)); /* 随机种子 */
	printf("Enter the number of sides per die, 0 to stop.\n");
	while (scanf("%d", &sides) == 1 && sides > 0)
	{
		printf("How many dice?\n");
		if ((status = scanf("%d", &dice)) != 1)
		{
			if (status == EOF)
				break; /* 退出循环 */
			else
			{
				printf("You should have entered an integer.");
				printf(" Let's begin again.\n");
				while (getchar() != '\n')
					continue; /* 处理错误的输入 */
				printf("How many sides? Enter 0 to stop.\n");
				continue;
			}
		}
		roll = roll_n_dice(dice, sides);
		printf("You have rolled a %d using %d %d-sided dice.\n",
			roll, dice, sides);
		printf("How many sides? Enter 0 to stop.\n");
	}
	printf("The rollem() function was called %d times.\n",
		roll_count); /* 使用外部变量 */

	printf("GOOD FORTUNE TO YOU!\n");

	system("pause");
	return 0;
}

运行测试

111.png

标签: C语言

Powered by emlog  蜀ICP备18021003号   sitemap

川公网安备 51019002001593号