我是初学者,这段代码(看起来很简单)会给我带来麻烦。这是一个程序(本书的一个例子)的功能,只需选择五张随机卡。
void shuffle( aDeck * thisDeck )
{
int x;
int iRnd;
int found = 0;
system("clear");
printf("\nYour five cards are: \n\n");
while ( found < 5 ) {
iRnd = rand() % 52;
if ( thisDeck[iRnd].used == 'n' ) {
switch (thisDeck[iRnd].value) {
case 12:
printf("Ace of %s\n", thisDeck[iRnd].type);
break;
case 11:
printf("King of %s\n", thisDeck[iRnd].type);
break;
case 10:
printf("Queen of %s\n", thisDeck[iRnd].type);
break;
case 9:
printf("Jack of %s\n", thisDeck[iRnd].type);
break;
default:
printf("%d of ", thisDeck[iRnd].value + 2);
printf("%s\n", thisDeck[iRnd].type);
break;
} // end switch
thisDeck[iRnd].used = 'y';
found = found + 1;
} //end if
} // end while loop
} //end shuffle
我不明白的是表达式
found = found + 1;
为什么我改变常常发生的奇怪事情的价值(例如4输出给2张牌)?
我非常感谢你的时间!
答案 0 :(得分:2)
该功能必须选择五张牌。变量found
用作选定卡片的计数器。如果选择了卡,则变量found
的计数器会增加
found = found + 1;
选择继续,直到found
等于5为止。
最初found
设置为0
int found = 0;
因为尚未选择卡片。
答案 1 :(得分:0)
found = found + 1;
计算所抽卡的周期。
如果将它增加4,则while只会循环两次:
找到的第一个==零
找到的第二个== 4
此外,如果我可以:代码中的很多细节可能会得到改善。
示例1:摆脱switch
。包括卡的描述作为卡结构的属性,以及.value
和.type
。这样你就需要打印出来。
示例2:将.used
标志设为int
(如果使用则保持非零值,否则保持为零)。
答案 2 :(得分:0)
found
是一个计数选择次数的计数器,让你的卡选择逻辑继续
int found = 0;
while(found < 5){ //found = 0,1,2,3,4, totally 5 cards will be selected
...
//pick up one card
...
found = found + 1; //to count pick up times and make while loop continue
}
更改found
会更改所选卡号(5 - initial_value_of_ found
)
int found = 4; // will select "5-4" cards
while(found < 5){ //found = 4, totally 1 cards will be selected
...
//pick up one card
...
found = found + 1; //to make while loop continue
}
答案 3 :(得分:0)
从与您的问题无关的代码中取出内容,然后
void shuffle( aDeck * thisDeck )
{
int found = 0;
while ( found < 5 )
{
// pick a card, print out what has been picked, and register it as used
found = found + 1;
} // end while loop
} //end shuffle
因此while循环的主体将执行5
次。在这种情况下,这意味着挑选五张牌。 found
的值控制:对于第一张卡片,found
将是0
,第二张1
,.....和第五张4
将表达式更改为其他内容可能会更改所挑选的卡片数量。尽管如此,更改while
条件可能更容易。
因此更改为found = found + 4
将改变迭代次数。第一次迭代将是0
,第二次4
,第三次8
。八是不少于五,所以改变的结果只是挑两张牌。
答案 4 :(得分:0)
代码正在寻找5张牌。找到的变量用作计数器..当你找到一张卡片时,你可以在之前找到的卡片中添加一张卡片。这样,当数量达到5时,你就会知道你已经找到了5张卡