2016-10-20 7 views
-3
#include <stdio.h> 
#include <stdlib.h> 
#include "rlutil.h" 

void Login(); 
void Register(); 

char username[32]; 
char password[32]; 
int main() 
{ 
    int logreg; 
    printf("Press '1' for Login! \n"); 
    printf("Press '2' for Register! \n"); 
    logreg = getch(); 
    printf("\n------------------------------------------------\n"); 
tester: 
    ; 
    if (logreg == '1') 
    { 
     Login(); 
    } 
    else if (logreg == '2') 
    { 
     Register(); 
    } 
    else 
    { 
     printf("\nInvalid Input!!! Chose between '1' or '2' !!!\n"); 
     logreg = getch(); 
     goto tester; 
    } 
    return 0; 
} 

void Login() 
{ 

start: 
    ; 
    char answer; 

    // Vnesuvanje na username 
    printf("\nEnter your Username: "); 
    scanf("%s",username); 

    // Vnesuvanje na Password 
    printf("\nEnter your Password: "); 
    scanf(" %s",password); 

    // Proverka na username i password dali se tocni ili ne!! 
    if (strcmp(username, "igor.mite") == 0 && strcmp(password, "igormite") == 0) 
    { 
     setColor(LIGHTGREEN); 
     printf("\nSuccessfully connected to our WebSite\n\n"); 
     setColor(GREY); 
     getch(); 
     return 0; 
    } 
    else 
    { 
     setColor(LIGHTRED); 
     printf("\nNo Access on our WebSite\n\n"); 
     printf("Invalid username or password!!!\n\n"); 
     setColor(GREY); 
     printf("Would you like to try again ?? [y/n]"); 
     answer = getch(); 
     printf("\n------------------------------------------------\n"); 
    } 

tester2: 
    ; 
    //proverka za Povtorno pustanje na programata 
    if (answer== 'y') 
    { 
     goto start; 
    } 
    else 
    { 
     if (answer!='n') 
     { 
      printf("Please choose between 'y' or 'n' !!!\n\n"); 
      answer = getch(); 
      goto tester2; 
     } 
     else 
     { 
      getch(); 
      return 0; 
     } 
    } 

    return; 
} 


void Register(){ 
    char acc[32]; 
    char * user; 


    FILE * fData; 
    fData = fopen("database.txt", "a"); 


    printf("\nEnter your desired Username: "); 
    user = scanf(" %s",acc); 
    fprintf(fData, &user, stdin); 
    return; 
} 

私が始め始める前に、私はプログラミングがうまくいかず、自分の英語がそれほど良くないと言いたいと思います。 ここに私のコードです。私たちは、私のコードの作業を行う方法をステップバイステップで行く:ファイルCへのユーザー入力プログラミング

  1. を使用すると、ログインするか、ユーザ登録するかどうかを尋ねます! (ログイン部分は、テキスト文書からユーザー情報を取得する以外はうまくいきます)

  2. ここに問題があります。ファイルへの入力をどのようにすればいいのですか?

「管理者」という名前の新しいアカウントを登録したいとしましょう。それは私のプログラムをクラッシュさせます。

私のコードはどのようにしてRegister()の機能で行うことができますか、もし私がそれをどのように修正できるか教えていただけたら、私に教えてください。

は、いくつかのコメントが私の言語洙であり、 をいただきありがとうございます...それらを見ていない:D

は、それはおそらく最も複雑なコードではありませんが、初心者のための私を気にしません。

編集:私は自分のコードを作業に近づけましたが、別の問題があります。私の登録作業が、ログイン部分は最初の行のみのために働く...のは、私はこのように私のファイルを持っているとしましょう : USER1 PASS1 user2のパス2 ユーザー3 PASS3 USER4 PASS4

それは私の場合にのみアクセスを許可しますuser2とpass2ではなく、user1というユーザー名とpass1というパスワードを入力します。 どうすればこの問題を解決できますか? CODE:

#include <stdio.h> 
#include <stdlib.h> 
#include "rlutil.h" 


void Login(); 
void Register(); 
char username[32]; 
char password[32]; 
char acc[32]; 
char pw[32]; 


int main() 
{ 
int logreg; 
printf("Press '1' For Login"); 
printf("Press '2' For Register\n"); 
logreg = getch(); 
printf("\n------------------------------------------------\n"); 
tester: 
; 
if (logreg == '1') 
{ 
    Login(); 
} 
else if (logreg == '2') 
{ 
    Register(); 
} 
else 
{ 
    printf("\nInvalid Input!!! Choose between '1' or '2' !!!\n"); 
    logreg = getch(); 
    goto tester; 
} 
return 0; 
} 

void Login() 
{ 
start: 
; 
char answer; 

// Vnesuvanje na username 
printf("\nEnter your Username: "); 
scanf("%s",username); 

// Vnesuvanje na Password 
printf("\nEnter your Password: "); 
scanf(" %s",password); 




FILE *fData; 
// Otvara file za citanje 
fData = fopen("database.txt", "rt"); 
if (!fData) 
{ 
    printf("The file can not be opened\n\a\a"); 
} 

int found=0; 

    while(!feof(fData) && !found) 
    { 
     fscanf(fData, "%s\t%s", acc, pw); 
     if (strcmp(username, acc) == 0 && strcmp(password, pw) == 0) 
     { 
      setColor(LIGHTGREEN); 
      printf("\nSuccessfuly logged it to our WebSite\n\n"); 
      setColor(GREY); 
      found = 1; 
      getch(); 
      break; 
     } 
     else if (!found) 
     { 
      setColor(LIGHTRED); 
      printf("\nNo Access to our WebSite\n\n"); 
      printf("Invalid username or password!!!\n\n"); 
      setColor(GREY); 
      printf("Would you like to try again?? [y/n] "); 
      answer = getch(); 
      found = 0; 
      printf("\n\n------------------------------------------------\n"); 
      break; 
     } 
    } 

fclose(fData); 

tester2: 
; 
//proverka za Povtorno pustanje na programata 
if (answer== 'y') 
{ 
    goto start; 
} 
else 
{ 
    if (answer!='n') 
    { 
     printf("Please choose between 'y' or 'n' !!!\n\n"); 
     answer = getch(); 
     goto tester2; 
    } 
    else 
    { 
     getch(); 
     return 0; 
    } 
} 

} 



{ 
char acc[32]; 
char pw[32]; 
FILE *fData; 
fData = fopen("database.txt", "a"); 
if (!fData) 
{ 
    printf("File could not be opened\n\a\a"); 
    getchar(); 
    return; 
} 
printf("Enter your desired Username: "); 
scanf("%s", acc); 
printf("Enter your desired Password: "); 
scanf("%s", pw); 
printf("\n"); 
fprintf(fData, "%s\t%s\n", acc, pw); 
fclose(fData); 
} 
+2

「while」ループで十分である場合は、「goto」を使用しないでください。 – dbush

+1

実際には 'goto'を使用しないでください - 私はそれを必要としませんでした –

+0

あなたの[' fprintf'](http://www.cplusplus.com/reference/cstdio/fprintf/)は間違っているようです – UnholySheep

答えて

0

が候補としてOPのcommentedソリューションを投稿。

void Register() { 
    FILE *fData; 
    int i; 
    char acc[32]; 
    char pw[32]; 
    int found = 0; 
    fData = fopen("database.txt", "wt"); 
    if (!fData) { 
    printf("File could not be opened\n\a\a"); 
    getchar(); 
    // return -1; 
    return; 
    } 
    printf("Enter your desired Username: "); 
    scanf("%s", acc); 
    printf("Enter your desired Password: "); 
    scanf("%s", pw); 
    printf("\n"); 
    fprintf(fData, "%s\t%s\n", acc, pw); 
    fclose(fData); 
} 
関連する問題