2016-12-27 12 views
-1

最近、私は16の数字を持つ整数と4つの数字(カード番号とパスワード)を持つ整数を含むファイルを私に与えるプロジェクトに取り組んできました。私の目標は、失敗した3回のログイン試行後にシャットダウンするユーザーパスワードシステムを作成することです。さて、これは問題ではない、私の問題は、コードをどのようにして作成したかにかかわらず、私の入力(カード番号またはパスワード)はファイルの値と一致しません。ここに私のコードは挿入されたユーザーの値がファイルの値と一致しないのはなぜですか?

typedef struct{ 
    int number[16]; 
    int pass[4]; 
} TypeCard; 

int main(void) 
{ 
    int i, c = 0, n, p, cards; 

    TypeCard card; 

    FILE *f = fopen("cards.txt", "r"); 

    for(i = 0; fscanf(f, "%d %d", card.number, card.pass)!= EOF; i++) 
    { 
     cards++; /*this is merely to fill this loop, i don't know if ill need it*/ 
    } 

    fclose(f); 

    while(c != 3) /*c is a counter */ 
    { 
     int al = 2 - c; /*al = attempts left*/ 

     printf("Insert card number: "); 
     scanf("%d", &n); 

     if(n == card.number[i]) 
     { 
      printf("Insert password: "); 
      scanf("%d", &p); 

      if(p == card.pass[i]) 
      { 
       printf("Access granted\n"); 
       return 0; 
      } 
      else 
      { 
       printf("Wrong password\n"); 
       printf("Attempts left: %d\n", al); 
       c++; 
      } 
     } 
     else 
     { 
      printf("Invalid card\n"); 
      printf("Attempts left: %d\n", al); 
      printf("Try again.\n\n"); 
      c++; 
     } 
    } 

    printf("Access blocked. Please contact the system administrator.\n"); 

    return 0; 
} 

私はどうすればいいですか?

+0

ループの反復 - fscanf(f、 "%d%d"、card.number、card.pass) ' - あなたの意図ではないと思いますか? –

+0

@EdHeal Isn '構造体のメンバにファイルからのint値を格納するはずですか? – EngineerWannabe

+0

配列の最初のメンバーを試してみてください!私はあなたが配列を埋めると思います。バインドもチェックする必要があります。また、あなたは空のループを持つことができますので、 'cards ++;'は必要ありません。 –

答えて

2

10桁しか扱えない32ビット以下のintに16桁の数字を読み込もうとしています。 16桁の数字を処理するには、64ビットで20桁の「long long」を使用する必要があります。

関連する問題