我需要这方面的帮助...我的问题是当我执行这个程序时,当我想重复滚动时,滚动将不会从第二次开始显示...我该怎么办?我不知道该怎么做才能解决这个问题..卡在这里
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, a, n, z;
char player[5][150], b, c;
float ave, total, f1, f2, f3;
total = 0;
ave = 0;
printf("\nPlease enter number of players : ");
scanf("%d", &a);
for (i = 0; i < a; i++)
{
printf("\nEnter player %d's name : ", i + 1);
scanf("%s", &player[i][150]);
}
printf("\nChoose the amount of dice used : ");
scanf(" %d", &n);
do
{
for (z = 1; z <= a; z++)
{
printf("\n\t%s\n ", player[z]);
if (n == 1)
{
do
{
f1 = 1.0 + 6.0 * ((float) rand() / RAND_MAX);
printf("\nRoll : %.0f\n", f1);
total = f1;
printf("Total : %.0f\n", total);
}while (f1 == 6);
}
else if (n == 2)
{
do
{
f1 = 1 + (rand() % 6);
f2 = 1 + (rand() % 6);
printf("\nRoll : %.0f,%.0f\n", f1, f2);
total = f1 + f2;
printf("Total : %.0f\n", total);
}while (f1 == f2);
}
else if (n == 3)
{
do
{
f1 = 1 + (rand() % 6);
f2 = 1 + (rand() % 6);
f3 = 1 + (rand() % 6);
printf("\nRoll : %.0f,%.0f,%.0f\n", f1, f2, f3);
total = f1 + f2 + f3;
printf("Total : %.0f\n", total);
}while (f1 == f2 && f2 == f3);
}
}
printf("\nRoll again ? (y/n) = ");
scanf("%s", &b);
}while (b == 'y');
printf("\n");
ave = total / n;
printf("Average : %.2f\n\n", ave);
return 0;
}
答案 0 :(得分:4)
首先是
scanf("%s", &b);
应该是
scanf("%c", &b);
你必须为你的do while
冲洗你的stdin才能工作。
while ((c = getchar()) != '\n' && c != EOF);
以便携式方式刷新stdin
答案 1 :(得分:0)
%s
读取一个C字符串,即一个空终止的char数组。包含'y'
的最短字符串是2个字符的数组:"y"
或{ 'y', '\0'}
。
因此,您应该使用char b;
更改char b[2];
,并以这种方式使用它:
scanf("%1s", b);
}while (*b == 'y');
当前代码在字符b
调用未定义行为后写入(至少)null:之后可能发生任何事情。但scanf("%1s", b);
只读取b[0]
中的第一个非空白字符,并在b[1]
中放置空格:正确。
但恕我直言,除非你确定,否则永远不要将输入忽略空白(空格,制表符,行尾)(%d%s%f...
)与输入明确地处理它们(%c
,fgets
)。为什么你这样做。所以我不建议你使用scanf("%c", b);