通过头文件使用C中的源文件的奇怪输出

时间:2015-03-11 06:06:07

标签: c printf

我目前正在用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.
}

如果有人能指出为什么它会在主文件中给我一个奇怪的输出,我会很感激。

1 个答案:

答案 0 :(得分:2)

有一些要提及的要点。

  1. <stdlib.h>中添加Dice_roll.c以获取srand()rand()的原型

  2. 摆脱;int Roll_Dice(void);中的Dice_roll.c。调用和声明函数时需要;,而不是函数定义。

  3. 额外检查side是否保留<=0

  4. 的值
  5. 要将side限制为最大值8,请将(sides > 9)更改为if (sides > 8)

  6. 注意:您可能希望将srand(time(NULL));main()功能移至Roll_Dice()


    编辑:

    根据以下评论中的信息,问题是两个连续printf()并排打印的输出,以使输出出现错误。