12-4有个小问题,在puts("有多少个骰子");
的输入判断中如果输入不是正数,会直接跳出,后续再行查看。
manysides.cpp主文件
#include "dicerolls.h" //提供roll_n_dice()原型,roll_count声明
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //为time()提供原型
int main(void)
{
int dice, roll;
int sides;
int status;
char ch;
srand((unsigned int )time(0));
//为【 roll:面数统计】提供随机种子,0 ~ 32567
puts("请输入面数,0去停止");
while (scanf("%d", &sides) && sides > 0)
{
puts("有多少个骰子");
if (( status = scanf("%d", &dice)) != 1)
{
if (status == EOF) //EOF为-1,个数不可能为负值
{
break;
printf("验证--(status < 0)--\n");
}
else
{
//也可以这样⬇
/*
while((ch = getchar()) != '\n')
{
putchar(ch); //把错误选项输出到屏幕上而已
puts("输入错误,请输入一个整数。");
}
*/
puts("你应该输入一个正整数。");
puts("请再次输入。");
while (getchar() != '\n')
{
//处理错误输入
continue;
}
puts("有多少面?0去停止");
continue;
}
}
roll = roll_n_dice(dice, sides);
printf("一共面数= %d , 有%d个骰子, 输入的面数= %d\n", roll, dice, sides);
puts("请再次输入,0去停止\n");
puts("请输入面数,0去停止");
}
printf("一共使用了%d次rollem()函数\n", roll_count);
return 0;
}
dicerools.cpp
#include "dicerolls.h"
#include <stdio.h>
#include <stdlib.h>
int roll_count = 0;
//外部链接--【定义式声明】(与1.h中的第一行对应)
static int rollem(int sides) //文件私有,仅仅为roll_n_dice( )函数服务
{
int roll;//面数统计
roll = rand() % sides + 1;
//1 ~ 6的随机数
printf("验证--rollem--\n");
++roll_count;
//对rollem( )函数次数调用的计算
return roll;
}
int roll_n_dice(int dice, int sides)
{
int d;
int total = 0;
if (sides < 2) //骰子面数不会小于偶数
{
puts("需要至少两面才行。");
printf("验证--(sides < 2)--\n");
return -2;
}
if (dice < 1)
{
puts("需要至少一个骰子才行。");
return -1;
}
for (d = 0; d < dice; d++) //计算投掷的骰子个数可能产生的面数总和
{
total += rollem(sides);
//manydices.cpp中输入sides,函数调用向函数实现中的形参进行值传递,返回roll值
printf("验证--(total)--\n");
}
return total;
}
dicesidesrool.h文件
extern int roll_count; //--【引用式声明】
int roll_n_dice(int dice, int sides);//骰子个数 骰子面数