2015-04-25 34 views
0

好吧,所以我在C编码方面真的很新,而且我的代码中有很多复制和粘贴。 (这是我最后的项目,所以如果时间允许的话,我真的没有时间优化和缩短,直到结束)。无论如何,为了这个原因,我会避免发布我的所有代码。我只会发布我正在尝试做的相关部分。随机移动tic tac脚趾在c

我需要游戏从1-9中挑选一个随机数字,然后使用该数字来选择棋盘上的移动。我在代码的这一部分添加了一个printf来确保一个数字被选中,但是当我去scanf时,游戏只是闪烁提示并且不会继续。

有没有人看到有什么不对或我需要发布任何其他代码段?任何帮助将非常感谢!我只包含了游戏的一个玩家部分,然后计算机应该移动。我取消了胜利支票和董事会的重新印刷。让我知道如果你们需要看到其他的东西,我只是不想拥有一大块代码。

if (player == 1) 
    { 
     for(k=0;k<9;k++) // 9 moves max. 
     { 
     printf("\n\n"); // print board again. 
     printf(" %c | %c | %c\n", board[0][0], board[0][1], board[0][2]); 
     printf("---+---+---\n"); 
     printf(" %c | %c | %c\n", board[1][0], board[1][1], board[1][2]); 
     printf("---+---+---\n"); 
     printf(" %c | %c | %c\n", board[2][0], board[2][1], board[2][2]); 

     do 
     { 
      printf("Player 1, where would you like to move? Enter 1-9\n"); 
      scanf("%d", &move); 

      if (move == 1) 
       board[0][0] = '1'; 
      if (move == 2) 
       board[0][1] = '1'; 
      if (move == 3) 
       board[0][2] = '1'; 
      if (move == 4) 
       board[1][0] = '1'; 
      if (move == 5) 
       board[1][1] = '1'; 
      if (move == 6) 
       board[1][2] = '1'; 
      if (move == 7) 
       board[2][0] = '1'; 
      if (move == 8) 
       board[2][1] = '1'; 
      if (move == 9) 
       board[2][2] = '1'; 

     }while(move>9 && move <1); 


     do 
     { 
      printf("Computer moves..."); 


      move = rand() % 9 + 1; 
      printf("%d", move); 
      scanf("%d", &move); 


      if (move == 1) 
       board[0][0] = '2'; 
      if (move == 2) 
       board[0][1] = '2'; 
      if (move == 3) 
       board[0][2] = '2'; 
      if (move == 4) 
       board[1][0] = '2'; 
      if (move == 5) 
       board[1][1] = '2'; 
      if (move == 6) 
       board[1][2] = '2'; 
      if (move == 7) 
       board[2][0] = '2'; 
      if (move == 8) 
       board[2][1] = '2'; 
      if (move == 9) 
       board[2][2] = '2'; 


     }while(move>9 && move <1); 



    } 
+1

你在期待'scanf()'做什么? –

+0

扫描计算机选取的随机数?当我用人体部分做到这一点时,它就可以工作。但是,当我使用rand来选择数字时,它看到scanf不? –

+0

@GabriellaCoronell Afaik(我不知道c),'scanf'从控制台请求输入,而不是任何任意的来源。 – Carcigenicate

回答

1

看来,你需要从你的代码reamove scanf()scanf()块,直到输入被提供给程序,它返回匹配格式字符串如果有的话,通过输入项目的数量。

如果您使用rand()生成号码,则根本不需要任何输入。

请阅读this,了解scanf()的用途。

+0

哇哈哈。这样一个简单的解决方案,我一直坚持。非常感谢。 –

+0

另外,感谢您的链接! –

0

试试这个

move = rand() % 9;

避免这种情况。

+0

这似乎是一个评论,而不是一个答案。请编辑您的问题以提供更好的解释,建议如答案应在评论部分给出。 – Siraj