int main(int argc, const char * argv[])
{
@autoreleasepool {
int userInput= 6 ;
char userChar='\0';
//creating new instances
Dice *a = [[Dice alloc] init];
//creating new objects
Die *d1 = [[Die alloc] initWithSides:&userInput];
Die *d2 = [[Die alloc] initWithSides:&userInput];
//adding dices
[a addDice:d1];
[a addDice:d2];
while(1)
{
printf("Press R to roll dices and Q to exit \n> ");
scanf("%c",&userChar);
if (userChar == 'r' | userChar =='R')
{
for (int i=0; i<10; i++)
{
[a rollDice];
printf("Dice 1 =%d\n",d1.returns);
printf("Dice 2 =%d\n",d2.returns);
printf("The total values of both dice is %d\n",a.totalValue);
printf("Does the dices have same value? Y(1) N(0) => %d\n\n",a.allSame);
}
}
else if (userChar == 'q' | userChar == 'Q')
{
return 0;
}
else
{
printf("Enter a valid command!\n");
}
}
}
}
我尝试创建一个重复自身的循环,当按下r时,在用户想要退出程序时执行掷骰子和q。否则,继续重复,直到输入正确的输入。但我不明白为什么如果我输入一个输入,它会重复其他的阶段?像这样,
Press R to roll dices and Q to exit
>l
Enter a valid command!
Press R to roll dices and Q to exit
>Enter a valid command! //Why does it repeats itself here??
Press R to roll dices and Q to exit
>
答案 0 :(得分:0)
嘿尝试使用以下必须工作的代码。
scanf(" %c",&userChar);
答案 1 :(得分:0)
如果您输入
l<RETURN>
在控制台中,输入缓冲区中有两个字符:“l”和
换行符。
第一个scanf()
读取“l”,第二个scanf()
读取换行符。
虽然这可以通过修改扫描格式来解决,但是更好的解决方案
用户输入的整行是使用fgets()
,例如
char buf[100];
while (fgets(buf, sizeof(buf), stdin) != NULL) {
userChar = buf[0];
// ...
}
请注意,逻辑“或”运算符为||
,而不是|
!