为什么在这个C程序中需要这样的表达式

时间:2015-08-07 22:20:45

标签: c

我是初学者,这段代码(看起来很简单)会给我带来麻烦。这是一个程序(本书的一个例子)的功能,只需选择五张随机卡。

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张牌)?

我非常感谢你的时间!

5 个答案:

答案 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张卡