为什么这个函数一直返回0?

时间:2016-10-28 22:28:32

标签: c return

我的tick-tac-toe游戏有一个相当奇怪的问题。我已经建立了一个非常简单的机制,允许(几乎)完美无瑕的游戏。在撰写这篇文章的那一刻,我努力防止用户使用输入用于不适合的目的(例如覆盖拍摄点)。我试图在我的函数中添加一个简单的if语句,称为ruch,它负责覆盖数组wynik(顺便存储数据)。这是函数本身:

int ruch(char pole, bool gracz){
    int i=0;
    for(i=0;i<9;i++)
    {
        if(gracz==true)
        {
            if(pole==i+1)
            {
                if(wynik[i]=='#')
                {
                    wynik[i]='X';
                    return 3;
                }
                else if(wynik[i]!='#')
                    return 0;
            }
        }
        else if(gracz==false)
        {
            if(pole==i+1)
            {
                if(wynik[i]=='#')
                {
                    wynik[i]='O';
                    return 3;
                }
                else if(wynik[i]!='#')
                    return 0;
            }
        }
    }
}

整个代码:http://pastebin.com/zNHHpHA1

正如你所看到的,返回的逻辑相当简单 - 如果ruch注意到不需要的行为,它将提示用户重新评估他的行动:

    while(ruch(input,ruc)==0){
        printf("Wprowadzono złą liczbę!\n");
        scanf("%d", &input);
        ruch(input, ruc);}

但是,无论输入如何,ruch函数都返回0。我认为这是阻止我的代码正常运行(相当)的唯一障碍。预先感谢您的任何帮助。 我不是母语为英语的人,所以请耐心等待。

1 个答案:

答案 0 :(得分:2)

在您的pastebin中,在第44-46行和第54-58行中,您使用相同的输入调用ruch三次。因此,第二次和第三次调用将始终返回0.

更改

ruch(input,ruc);
printf("%d", ruch(input,ruc));
while(ruch(input, ruc)==0) {
  printf("Wprowadzono złą liczbę!\n");
  scanf("%d", &input);
  ruch(input, ruc);
}

类似

int result = ruch(input, ruc);
printf("%d", result);
while(result == 0) {
  printf("Wprowadzono złą liczbę!\n");
  scanf("%d", &input);
  result = ruch(input, ruc);
}