如何解决我想知道如何在C语言这个简单的骰子游戏中加入循环
我想知道循环这段代码的最佳方法。基本上,这是一个骰子游戏,它会在1到6之间绘制一个随机数。一旦数字显示给玩家,我想给他们选择“您想再次玩吗?”如果输入y或yes,则游戏将重新启动。我猜我应该使用while循环,但是我不确定该怎么做。任何帮助将不胜感激
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main() {
int lower = 1,upper = 6,count = 1;
srand(time(0));
generate_random(lower,upper,count);
}
void generate_random(int l,int r,int count) {
int i;
for (i = 0; i < count; i++) {
int rand_num = (rand() % (r - l + 1)) + l;
printf("You rolled a %d",rand_num);
}
}
解决方法
很明显,您要提示并允许用户“再次滚动”。在您的代码中,滚动是什么?那就是你想要循环的。在main()
中,似乎是:
generate_random(lower,upper,count);
现在,当您应用while
循环或do ... while();
循环时,必须谨慎对待输入。您可以简单地getchar()
,但是您需要考虑用户按下 Enter 生成的'\n'
,否则当getchar()
时您会跳过提示愉快地将'\n'
作为您的下一个输入。 (如果用户输入"Yes again!"
,该怎么办?)
所有新的C程序员都应使用fgets()
和足以容纳行的预期内容(至少32个字符,或2X预期最大输入作为粗略经验法则)的缓冲区进行用户输入。这样,即使用户输入"Yes again!"
,所有字符也会被读入缓冲区并被消耗-包括'\n'
。
您只需简单地取消引用缓冲区即可轻松检查用作缓冲区的字符数组的第一个字符,例如
char buf[64] = "";
然后使用以下方法检查缓冲区中的第一个字符:
*buf == 'n'
这是怎么工作的?
*buf == *(buf + 0) == buf[0]
因此,您只是在检查数组第一个索引处的字符。
完全将其放入,您可以这样做:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXC 64 /* if you need a constant,#define one (or more) */
void generate_random(int l,int r,int count)
{
for (int i = 0; i < count; i++)
printf("You rolled a %d\n",rand() % (r - l + 1) + l);
}
int main (void) {
int lower = 1,upper = 6,count = 1;
char buf[MAXC] = ""; /* array of 64 chars to use as a buffer */
/* to hold the user-input */
srand(time(0));
while (*buf != 'n' && *buf != 'N') { /* loop while 1st char not 'n' or 'N' */
generate_random(lower,count);
fputs ("\nwould you like to roll again (y/n)? ",stdout); /* prompt again */
if (!fgets(buf,sizeof buf,stdin)) /* read user-input & validate read */
break; /* if user generates EOF break */
}
}
do .. while();
循环将不需要使用buf
将buf[MAXC] = "";
初始化为空字符串(这将显式初始化第一个字符0
,然后初始化其余的63-字符默认为0
)
大量使用/输出
$ ./bin/diceagain
You rolled a 3
would you like to roll again (y/n)? y
You rolled a 2
would you like to roll again (y/n)? Yes please again!
You rolled a 4
would you like to roll again (y/n)? Sure one more time...
You rolled a 4
would you like to roll again (y/n)? n
只要用户输入的字符数不超过63个,您就不会在stdin
上留下多余的未读字符。
仔细检查一下,如果还有其他问题,请告诉我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。