私は自分の勤務先の仕事でそれを知る必要があるので、基本的なCを学びたいと思っています。私はJavaを使用していましたが、構造体メンバの値にアクセスしたり変更したりするのに少し問題がありました。別の関数の構造体の値を変更する
ビルドしようとしているプログラムは単純なポーカークライアントです。 は、私は、次の構造体を持っている:
typedef struct kort{
int draget;
char farg;
int nummer;
struct kort *next;
}kort; `
私も構造体の52人のメンバーを作成し、スーツや番号を割り当て、配列に追加「blandaKort()」という名前の関数を持っています。コードは次のとおりです。
void blandaKort(){
char farg[4]={'S','K','R','J'};
int nummer[14]={0,2,3,4,5,6,7,8,9,10,11,12,13,14};
kort kortArray[52];
int tempRaknare=0;
int i;
int j;
kort *huvud=NULL;
for(i=0; i<=3; i++){
for(j=1; j<=13; j++){
kort *huvud=NULL;
// kort k;
kort *k;
k=(kort*)malloc(sizeof(kort));
k->farg=farg[i];
k->nummer=nummer[j];
k->draget=0;
huvud=k;
// k.farg=farg[i];
// k.nummer=nummer[j];
kortArray[tempRaknare]=*k;
tempRaknare++;
}
}
tempRaknare, i, j =0;
delaHand(kortArray);
}
機能delaHand()
は、カードの配列を受け取り、そして2枚のランダムなカードを選択します。私が達成しようとしているのは、私の旗 "draget"を1にセットして、どのカードが描かれているかを教えてくれることです。コードは次のとおりです。
void delaHand(kort kortArray[]){
srand(time(NULL));
int x = rand() % 52 + 1;
int y = rand() %52+1;
kort *k;
k=(kort*)malloc(sizeof(kort));
kort kortHand[2];
//if(kortArray[x].draget!=1){
kortHand[0]=kortArray[x];
*k=kortArray[x];
k->draget=1;
kortArray[x]=*k;
// }
//if(kortArray[y].draget!=1){
kortHand[1]=kortArray[y];
kortArray[y].draget=1;
.....
kortHand[]
のメンバーを印刷イムは、それが正しいスーツや数を示し
が、変数draget
は変わりません。 歓声
誰かがdelaHand()でk変数を削除することを提案したので、コードをkortArray [x] .draget = 1;に変更しました。 kortHand [0] = kortArray [x];それがうまく動作することを知っている。私は、(ポインタ、*または&)を使用するときはいつも、cでの参照処理全体を理解する上で問題があることを認めなければなりません:) –