一道关于骰子的C语言问题

题目是:每次掷两枚骰子,然后计算点数之和,如果每次点数和为7或11,则玩家获胜,如果为2,3或12,则玩家输了,如果为4,5,6,8,9或10,则将这个和作为游戏者获胜需要掷出的点数,继续掷骰子,知道掷出该点数时算是游戏者获胜,如果7次仍未掷出该点数,则游戏者输。
这个是我写的程序,请高手们帮忙看下对不对。
#include<stdio.h>
#include<time.h>
int main()
{srand((unsigned)time(NELL));//用系统时间当种子,对随机函数进行初始化
int touzi1,touzi2,sum1,sum2;
touzi1=rand()%6+1;
touzi2=rand()%6+1;
sum1=touzi1+touzi2;
printf("第一次\n骰子和为%d\n",sum1);

if(sum1==11||sum1==7)
{printf("you win\n");
else
if(sum1==2||sum1==12||sum1=3);
{printf("you lose\n");
else
{
int n=7;while(true)
{
printf("第二第%d次\n",8-n);
touzi1=rand()%6+1;
touzi2=rand()%6+1;
sum2=touzi1+touzi2;
printf("骰子和为%d\n",sum2);
if(sum2==sum1)
{
printf("you win\n");
break;
}
n--;
if(n==0)
{
printf("you lose\n");
break;
}
}
return 0;
}

LZ 的 if 分支的语法有问题,主要是 {} 的一一对应和 ; 结尾上面。书写规范的代码格式能有效减少这些问题的发生

还有一些错误见下面修改过后的代码注释,以下代码 VS2010 通过,运行正常了

=========================================================================

#include <stdio.h>

#include <stdlib.h> // srand() rand() 在该头文件中声明,VS2010要求包含它

#include <time.h>

int main()

{

 srand((unsigned)time(NULL)); // 这里参数是 NULL 没 NELL 这个宏

 int touzi1, touzi2, sum1, sum2;

 touzi1 =rand() % 6 + 1;

 touzi2 =rand() % 6 + 1;

 sum1 = touzi1 + touzi2;

 printf("第一次:\n骰子和为%d\n",sum1);

 if(sum1 == 11 || sum1 == 7)

 {

  printf("you win!\n"); // 语句结束要加 ‘;’

 } // if 分支的语句块的花括弧要一一对应

 else if(sum1 == 2 || sum1 == 12 || sum1 == 3) // else if 一般写在同一行,这里不加 ‘;’

 {

  printf("you lose!\n"); // 同上‘;’结束语句

 } // 同上,分支花括弧一一对应

 else

 { 

  for (int n = 7; n!= 0; --n) // 这里用 for 循环会更加直观

  {printf("\n第二第%d次\n",8-n);

   touzi1 = rand() % 6 + 1;

   touzi2 = rand() % 6 + 1;

   sum2 = touzi1 + touzi2;

   printf("骰子和为%d\n", sum2);

   

   if(sum2 == sum1)

   {

    printf("you win!\n");

    return 0; // 玩家赢游戏结束,退出程序用 return 0;

   }      

  }

  printf("you lose!\n");  

 }  

 

} // 缺少一个闭合的 “}”

温馨提示:答案为网友推荐,仅供参考
相似回答