【发布时间】:2013-07-04 01:01:14
【问题描述】:
此代码适用于掷骰子游戏。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
int roll_dice(void);
bool play_game(void);
int main()
{
int i, ch,win = 0,lose = 0;
bool flag;
srand((unsigned)time(NULL));
do
{
flag = play_game();
if(flag)
{
printf("You win!");
win++;
}
else
{
printf("You lose!");
lose++;
}
printf("\n\nPlay again(Y/N)? ");
scanf("%c", &ch);
ch = getchar();
printf("\n");
}while(ch == 'Y' || ch == 'y');
printf("\nWins: %d Losses: %d",win,lose);
return 0;
}
int roll_dice(void)
{
return rand()%6 + rand()%6 + 2;
}
bool play_game(void)
{
int sum = roll_dice();
printf("You rolled: %d\n", sum);
if(sum == 7 || sum == 11)
return 1;
else if(sum == 2 || sum == 3 || sum == 12)
return 0;
else
{
int point = sum;
printf("Your point is: %d\n", point);
do
{
sum = roll_dice();
printf("You rolled: %d\n", sum);
if(sum == 7)
return 0;
}while(point != sum);
return 1;
}
}
我只有代码 sn-p 有问题
printf("\n\nPlay again(Y/N)? ");
scanf("%c", &ch);
ch = getchar();
printf("\n");
我使用过,因为无论用户输入Y 或N,它都会在一次迭代后终止。我以为我把ch = getchar() 吃掉\n 做错了,我删除它并在转换说明符之前放置一个空格并用" %c" 替换它也不起作用。当我用@ 替换转换说明符时987654329@ 工作正常。
这有什么问题吗?
我访问了这个post,它说的和我做的一样。
【问题讨论】:
-
王座游戏..
-
"用
scanf()读取字符" - 不,不,从不! 为此,可以使用fgetc(stdin)代替。事实上,如果你考虑过使用scanf(),那就不要了。 -
@Renan;是的,我没有发布问题,因为它与它无关。
-
顺便说一句,如果您将值转换为字符 (
%c),则不应在此处添加\n。\n本身就是另一个字符,而您只获取一个字符。但是话又说回来,我的 C++ 比泰坦尼克号还生锈。 -
@H2CO3 我认为您的评论本身就是一个值得回答的问题。