我目前正在用C编写一个小骰子滚动游戏,我得到一个奇怪的错误。
我有一个源文件中的代码用于运行程序,我也将它放入头文件中,并将其包含在我的main()函数中。
如果我自己运行骰子滚动程序作为它自己的程序,我会得到正确的结果。一旦我运行它并通过标题链接它我得到奇怪的结果数百,例如输出是927两卷骰子没有意义。
代码如下。
Dice.h
int Roll_Dice(void); //haven't used headers a lot so i just have this placed in there.
Dice_roll.c
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int Roll_Dice(void)
{
setvbuf(stdout, 0, _IONBF, 0);
int dice1 = 0;
int dice2 = 0;
int dice_roll= 0;
int sides;
int i = 0;
srand(time(NULL));
{
rollagain:
printf("how many sides of the dice are there? (maximum 8)");
scanf ("%d", &sides);
if (sides > 9)
{
printf("this is not a valid input, must be 8 or less\n ");
goto rollagain;
} else {
dice1 = (rand() % sides) + 1; //pretty self explantory
dice2 = (rand() % sides) + 1;
dice_roll = dice1 + dice2;
}
printf("the number you rolled was %d", dice_roll);
return 0;
// tried changing this to return "dice_roll" but still got weird outputs when using it with a header.
}
}
MAIN.C
#include <stdio.h>
#include <string.h>
#include "Dice.h"
int main(void)
{
printf("%d", Roll_Dice()); simple thing to call the function, don't actually know if this is correct.
}
如果有人能指出为什么它会在主文件中给我一个奇怪的输出,我会很感激。
答案 0 :(得分:2)
有一些要提及的要点。
在<stdlib.h>
中添加Dice_roll.c
以获取srand()
和rand()
的原型
摆脱;
中int Roll_Dice(void);
中的Dice_roll.c
。调用和声明函数时需要;
,而不是函数定义。
额外检查side
是否保留<=0
要将side
限制为最大值8,请将(sides > 9)
更改为if (sides > 8)
注意:您可能希望将srand(time(NULL));
从main()
功能移至Roll_Dice()
。
编辑:
根据以下评论中的信息,问题是两个连续printf()
并排打印的输出,以使输出出现错误。