循环函数不按我的预期行事。 C

时间:2014-08-12 01:29:20

标签: c function while-loop

我正在用c制作一个简单的游戏,并且在我的功能中传递和接收信息时遇到了麻烦。

我希望代码基本上运行t函数,然后打印得到的分数。然后,除非其中一个分数大于3和2大于另一个分数,我希望它再次运行并打印结果。

现在它正在运行t函数,然后卡住了。

任何帮助或想法都会非常感激,或者如果我遗漏了信息,请发表评论。

#include <stdio.h>
#include <stdlib.h>

void t(int *score1,int *score2)
{
    int r,p;
    r=rand() % 140;
    if(r>30)
    {
        *score1=score1+1;
    }
    if(30>r)
    {
        *score2=score2+1;
    }
    if(r==30)
    {
    *score2=score2+1;
    }
}

void main(int argc, char *argv[])
{
    srand(time(NULL));
    int score1 =0;
    int score2 =0;
    int x =0;
    while(x==0)
    {
        t(&score1, &score2);
        printf("%d\n",score1);
        printf("%d\n",score2);

        if(score1 > 3 && score1==score2+2)
        {
            printf("Player 1 Wins\n");
            x++;
        }
        if(score2 > 3 && (score2==score1+2))
        {
            printf("Player 2 Wins\n");
            x++;
        }
    }
    return;
}

2 个答案:

答案 0 :(得分:1)

说明: 不要在t函数内调用srand(time(NULL))。 srand()根据时间创建一个种子,但是如果你在很短的时间内每次都调用它。见srand() — why call it only once?

代码:

#include <stdio.h>
#include <stdlib.h>

void t(int *score1,int *score2){
    int r,p;
    r=rand() % 140;

    printf("Random r: %d\n",r);
    if(r>30){
       (*score1)++;
    }
    else {
       (*score2)++;
    }
}

void main(int argc, char *argv[]){

int score1 =0;
int score2 =0;
int x =0;

srand(time(NULL));

while(x==0){
    t(&score1, &score2);
    printf("Score 1: %d\n",score1);
    printf("Score 2: %d\n",score2);

    if(score1 > 3 && score1==score2+2){
        printf("Player 1 Wins\n");
        x++;
    }

    if(score2 > 3 && (score2==score1+2)){
        printf("Player 2 Wins\n");
        x++;
    }
}

return;
}

示例输出:

Random r: 138
Score 1: 1
Score 2: 0
Random r: 2
Score 1: 1
Score 2: 1
Random r: 103
Score 1: 2
Score 2: 1
Random r: 26
Score 1: 2
Score 2: 2
Random r: 20
Score 1: 2
Score 2: 3
Random r: 12
Score 1: 2
Score 2: 4
Player 2 Wins

答案 1 :(得分:0)

这有效:

#include <stdio.h>
#include <stdlib.h>

void t(int *score1,int *score2)
{
    int r,p;
    r=rand() % 140;
    printf("%d\n", r);
    if(r>30)
    {
        *score1+=1; //increase score1 and not pointer of score1
    }
    else
    {
        *score2+=1; //increase score2 and not pointer of score2
    }

}

void main(int argc, char *argv[])
{
    srand(time(NULL));
    int score1=0, score2=0;
    int x =0;
    while(x==0)
    {
        t(&score1, &score2);
        printf("%d ",score1);
        printf("%d\n",score2);

        if(score1 > 3 && score1==score2+2)
        {
            printf("Player 1 Wins\n");
            x++;
        }
        if(score2 > 3 && (score2==score1+2))
        {
            printf("Player 2 Wins\n");
            x++;
        }
    }
    return;
}