题目是:每次掷两枚骰子,然后计算点数之和,如果每次点数和为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");
}
} // 缺少一个闭合的 “}”