#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へのユーザー入力プログラミング
を使用すると、ログインするか、ユーザ登録するかどうかを尋ねます! (ログイン部分は、テキスト文書からユーザー情報を取得する以外はうまくいきます)
ここに問題があります。ファイルへの入力をどのようにすればいいのですか?
「管理者」という名前の新しいアカウントを登録したいとしましょう。それは私のプログラムをクラッシュさせます。
私のコードはどのようにして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);
}
「while」ループで十分である場合は、「goto」を使用しないでください。 – dbush
実際には 'goto'を使用しないでください - 私はそれを必要としませんでした –
あなたの[' fprintf'](http://www.cplusplus.com/reference/cstdio/fprintf/)は間違っているようです – UnholySheep