C – 对这种奇怪的行为感到茫然

所以…我有一小段代码,我早上大部分时间都在做。 这只是一个小项目,可以帮助我记住语法等等。 我显然错过了某种大错误,因为代码因为我不理解的原因返回了分段错误。

#include  #include  #include  #include  #include  struct cards { int card_value[99]; char card_name[99]; char card_suit[99]; int card_tally; }; struct cards hand[2]; void tally (int a) { int k, j; for (k=0; k5; d++) { if (hand[a].card_name[d] =='A') { int y; int z = 10; for (y=0; y<5; y++) z = z + hand[a].card_value[y]; if (z  1) && (z < 10)) { hand[a].card_value[x]=z; hand[a].card_name[x]=((char) '0' + z); } else if (z == 10) { hand[a].card_value[x]=z; hand[a].card_name[x]='T'; } else if (z == 11) { hand[a].card_value[x]=10; hand[a].card_name[x]='J'; } else if (z == 12) { hand[a].card_value[x]=10; hand[a].card_name[x]='Q'; } else if (z == 13) { hand[a].card_value[x]=10; hand[a].card_name[x]='K'; } else if (z == 1) { /*Function 'check_for_ace' deals with this more properly*/ hand[a].card_value[x]=1; hand[a].card_name[x]='A'; } check_for_ace(a); tally(a); } void display_hands () { int x; printf("\nDealer's Hand Shows: "); for (x=0; hand[0].card_name[x]!=0; x++) { printf("%c ", hand[0].card_name[x]); } printf("\nPlayer's Hand Shows: "); for (x=0; hand[1].card_name[x]!=0; x++) { printf("%c ", hand[1].card_name[x]); } } void dealer_turn() { while (hand[0].card_tally < 17) draw_card(0); } void player_turn() { int op=0; while (op != 2) { printf("What would you like to do?\n"); printf("(1)it or (2)tand\n"); scanf("%d", &op); if (op == 1) draw_card(1); } } int main(int argc, char **argv) { srand(time(NULL)); draw_card(0); draw_card(1); draw_card(1); display_hands(); player_turn(); dealer_turn(); display_hands(); return 0; } 

现在,真正奇怪的是,看到player_turn和dealer_turn之间的空行? 如果我在其中放置一个display_hands,代码执行时没有错误。

有任何想法吗?

此外,我意识到我确实使用了我不需要的标题。 我打算稍后使用它们,然后将它们留在这篇文章中,这样我就可以完全按照错误保留所有内容。

在执行此行之前,您没有初始化j。

  j = j + hand[a].card_value[k]; 

当我在代码中添加j=0初始化时,它不再崩溃。

例如

 void tally (int a) { int k, j; j=0; /* <----- added this line */ for (k=0; k<5; k++) { j = j + hand[a].card_value[k]; } hand[a].card_tally = j; }