2016-11-03 16 views
-1

signed long long intを使用して、ユーザーが入力した桁数をカウントしています。正しいIDとピンが入力されたときに、IDとピンが正しくない場合、プログラムは繰り返し入力を要求し、「正常にログイン」を表示する必要があります。しかし、正しいIDとピンを入力すると、プログラムは入力を何度も繰り返し要求し続けます。私のコードで間違ったことは?ヘルプは非常に感謝しています。ここでcでのログイン確認

#include <stdio.h> 

int main() 
{ 
    long long n = 1234567,m = 123456; 
    int count = 0, count2 = 0, c, a; 

    do 
    { 
     printf("Enter student ID: "); 
     scanf("%lli", &n); 

     while (n != 0) 
     { 
      n /= 10; 
      ++count; 
     } 

     if (count < 7 || count > 8) 
      printf("The Student ID should be in 7 or 8 digits, please try again\n"); 

    } while(n != 1234567); 


    do 
    { 
     printf("Enter security pin: "); 
     scanf("%lli", &m); 
     { 
      c = a; 
      a++; 
     } 

    while (m != 0) 
    { 
     m /= 10; 
     ++count2; 
    } 

    if (count2 < 6 || count2 > 6) 
     printf("Please enter a 6-digit pin\n"); 

    if (a == 5) 
    { 
     printf("\nAccess Denied\n"); 
    } 

    } while (m != 123456); 

    if (n == 1234567 && m == 123456) 
     printf("Successfully Login\n"); 
    else 
     printf("Wrong password, try again\n"); 

    return 0; 
} 
+0

デバッガでステップインしてください –

+0

IDとPINは、おそらくintsではなく数字の文字列として入力する方がよいでしょう。 –

+1

あなたはwhileループで 'n'の値を破壊しています。 1234567と決して等しくはありませんが、常にゼロに等しくなります –

答えて

0

問題はロジックである:ユーザーがscanf関数ではn = 1234567として正しい学生証を与えている

scanf("%lli", &n); 
while (n != 0) 
     { 
      n /= 10; 
      ++count; 
     } 

にもかかわらず、それが取得する。ここ

は私のコードですここではn = n/10 ---と分けられ、n = 123456が割り当てられる。コードでは、whileループロジックのためにnとmの値が正しい値になることはありません。同じことがパスワードにも適用されます。 パスワードの長さとIDの長さを確認したい場合は、文字列をatoi関数とともに使用する方がよいでしょう。

関連する問題