2017-01-18 10 views
-2
#include <stdio.h> 
#include <stdlib.h> 

struct date { 
    int day; 
    int month; 
    int year; 
}; 

struct lottery { 
    int aa; 
    struct date date1; 
    int n1; 
    int n2; 
    int n3; 
    int n4; 
    int n5; 
    int joker; 
}; 

void load(struct lottery *array) { 
    FILE *fp; 
    fp = fopen("as.txt", "r"); 
    if (fp == NULL) 
     printf("00000\n"); 
    int i; 
    for (i = 0; i < 1; i++) { 
     fscanf(fp, "%d;%d/%d/%d;%d;%d;%d;%d;%d;%d", &array[i].aa, &array[i].date1.day, &array[i].date1.month, &array[i].date1.year, &array[i].n1, &array[i].n2, &array[i].n3, &array[i].n4, &array[i].n5, &array[i].joker); 
     if (feof(fp)) 
      break; 
    } 
    array = (struct lottery*)realloc(array, i * sizeof(struct lottery)); 
    // printf("%d;%d/%d/%d;%d;%d;%d;%d;%d;%d", array[0].aa, array[0].date1.day, array[0].date1.month, array[0].date1.year, array[0].n1, array[0].n2, array[0].n3, array[0].n4, array[0].n5, array[0].joker); 
} 

int main() { 
    struct lottery *array; 
    array = (struct lottery *)malloc(4 * sizeof(struct lottery)); 
    // printf("%d", sizeof(struct lottery)); 
    load(struct lottery array); 
    printf("%d",array[0].aa); 

    return 0; 
} 

で、この構造体のプログラムをコンパイルエラーを取得し、私は私のmain機能でラインload(struct lottery array); でエラーが発生します。エラーは、構造体の前に期待される式を示します。 私はそれをgoogledと私はそこに表現が期待されると私はちょっと混乱している理由を理解できませんでした。私はこんにちはC

+0

? –

+0

スタックオーバーフローへようこそ! ['malloc()'と 'C 'のファミリーの戻り値をキャストしない理由についてのこのディスカッションを参照してください。](http://stackoverflow.com/q/605845/2173917)。 –

+0

コードを正しくフォーマットする方法を学んでください。可読性は良いコードの主要な側面です。 :) –

答えて

1

問題は関数呼び出しにあります。あなたのコードでは、あなたが書いたのです

load(struct lottery array); 

これは間違っています。あなたは、あなたのfopen()障害チェックとその後のコードも間違って見えた

load(array); 

のように、引数としてのみ変数を渡す必要があります。あなたは失敗のケースをチェックしていますが、返されたポインタは引き続き使用し続けます。どのような種類のチェックでもチェックが最初に行われた場合の効果は無効になります。

+1

ありがとうございます。今は完璧に動作します! – Edward

+0

@Edwardよろしくお願いします。また、[あなたを助けた回答を受け入れることを検討する]こともできます(http://meta.stackexchange.com/q/5234/244062)。 –

1

関数を呼び出すときに関数に渡されるパラメータは単なる変数です。データ型も含める必要はありません。だから、エラーがある行の行

load(struct lottery array); 

だけであるべき

load(array); 
関連する問題