(Язык программирования C) функция входа в систему
Это мини-проект c, над которым я сейчас работаю. Я пытаюсь войти в систему после того,как зарегистрирую новую учетную запись, но даже я ввожу правильную информацию, все равно не могу войти, не могу найти ошибку. Кода довольно много, но я изо всех сил старался свести его к минимуму.
Код:
Это основной интерфейс при запуске консоли, для выбора входа в систему либо регистрации.Если вы впервые входите в систему, вам необходимо зарегистрировать новую учетную запись перед входом в систему.
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<windows.h> #include<string.h> void customer(); void customerres(); void customerlogin(); void fordelay(); int i, j; int main_exit; struct date { int month, day, year; }; struct { int acc_no, age; char password[20]; char repassword[20]; char name[60]; char user[60]; char address[60]; char gender[15]; char acc_type[10]; double phone; float amt; struct date dob; struct date deposit; struct date withdraw; }add, upd, check; void fordelay(int j) { int i, k; for (i = 0;i < j;i++) k = i; } void main() { system("cls"); int choose; printf("\n1. Login\n2. Register\n\n\nEnter your choice:"); scanf("%d", &choose); switch (choose) { case 1: customerlogin(); break; case 2: customerres(); break; } }
И это функция регистрации, я добавляю две функции, которые проверяют наличие номера счета и проверяют соответствие пароля повторного ввода или нет. Для проверки наличия номера счета я использую указатель, чтобы сделать это. После ввода остальной информации пользователя программа сохранит ее в текстовый файл.
void customerres() { int checkpassword; FILE* ptr; ptr = fopen("record.txt", "a+"); account_no: system("cls"); printf("Register New Account"); printf("\n\n\nEnter today's date(dd/mm/yyyy):"); scanf("%d/%d/%d", &add.deposit.day, &add.deposit.month, &add.deposit.year); printf("\nEnter the Account Number:"); scanf("%d", &check.acc_no); while (fscanf(ptr, "%d %s %s %s %s %d/%d/%d %d %s %s %lf %s %f %d/%d/%d\n", &add.acc_no, add.password, add.repassword, add.user, add.name, &add.dob.month, &add.dob.day, &add.dob.year, &add.age, add.address, add.gender, &add.phone, add.acc_type, &add.amt, &add.deposit.month, &add.deposit.day, &add.deposit.year) != EOF) { if (check.acc_no == add.acc_no) { printf("Account no. already in use!"); fordelay(1000000000); goto account_no; } } add.acc_no = check.acc_no; printf("\nEnter the Username:"); scanf("%s", add.user); checkpassword = 0; while (checkpassword == 0) { password: printf("\nEnter the password:"); scanf("%s", add.password); printf("\nRe-enter the password:"); scanf("%s", add.repassword); if (strcmp(add.password, add.repassword) == 0) { checkpassword = 1; printf("Password match!\n"); } else { printf("Password don't match!\n"); fordelay(1000000000); goto password; } } printf("\nEnter your name:"); scanf("%s", add.name); printf("\nEnter the Date Of Birth(dd/mm/yyyy):"); scanf("%d/%d/%d", &add.dob.day, &add.dob.month, &add.dob.year); printf("\nEnter the age:"); scanf("%d", &add.age); printf("\nEnter the address:"); scanf("%s", add.address); printf("\nEnter the gender:"); scanf("%s", add.gender); printf("\nEnter the phone number: "); scanf("%lf", &add.phone); printf("\nEnter the amount to deposit:$"); scanf("%f", &add.amt); printf("\nType of account:\n\t#Saving\n\t#Current\n\tEnter your choice:"); scanf("%s", add.acc_type); fprintf(ptr, "%d %s %s %s %s %d/%d/%d %d %s %s %lf %s %f %d/%d/%d\n", &add.acc_no, add.password, add.repassword, add.user, add.name, add.dob.month, add.dob.day, add.dob.year, add.age, add.address, add.gender, add.phone, add.acc_type, add.amt, add.deposit.month, add.deposit.day, add.deposit.year); fclose(ptr); printf("\nAccount created successfully!"); add_invalid: printf("\n\n\n\t\tEnter 1 to go to the main menu and 0 to exit:"); scanf("%d", &main_exit); system("cls"); if (main_exit == 1) { main(); } else if (main_exit == 0) { exit(0); } else { printf("\nInvalid!\a"); goto add_invalid; } }
В этом коде я сделал функцию проверки того, правильно ли пользователь ввел информацию. Если номер учетной записи, имя пользователя и пароль совпадают, он успешно войдет в систему, но здесь я потерпел неудачу.
void customerlogin() { system("cls"); FILE* ptr; ptr = fopen("record.txt", "r"); printf("\nAccount number: "); scanf("%d", &check.acc_no); printf("Username: "); scanf("%s", check.name); printf("Password: "); scanf("%s", check.password); int checkcredential, choose, findacct, login; choose = 0; checkcredential = 0; findacct = 0; login = 0; while (fscanf(ptr, "%d %s %s %s %s %d/%d/%d %d %s %s %lf %s %f %d/%d/%d\n", &add.acc_no, add.password, add.repassword, add.user, add.name, &add.dob.month, &add.dob.day, &add.dob.year, &add.age, add.address, add.gender, &add.phone, add.acc_type, &add.amt, &add.deposit.month, &add.deposit.day, &add.deposit.year) != EOF) { if (check.acc_no == add.acc_no) { if (strcmp(check.name, add.name) == 0) { if (strcmp(check.password, add.password) == 0) { fclose(ptr); login = 1; customer(check.acc_no); } else { checkcredential = 1; } } else { checkcredential = 1; } } else { findacct = 1; } } fclose(ptr); if (login == 0) { if (findacct == 1 || checkcredential == 1) { printf("\nSorry, wrong credentials!\n\nEnter 1 to try again and 0 to exit:"); scanf("%d", &main_exit); system("cls"); if (main_exit == 1) { customerlogin(); } else if (main_exit == 0) { exit(0); } } } } void customer() { printf("/n Login Successful!"); }
Спасибо за любые исправления в моем коде, я оценил это.
Что я уже пробовал:
Я пробовал много способов отредактировать свой код, но все равно потерпел неудачу, похоже, я действительно не правильно поймал ошибку...
OriginalGriff
Если бы мы хотели разместить на SO, мы бы разместили на SO. Мы этого не делаем - потому что размещаем здесь сообщения. Говоря "!Я сделал то же самое в другом месте" - это просто грубо и не улучшает ваши изменения в ответе хеттинга...
Member 14643779
Мне очень жаль, что я не заметил неуместности своих слов. Я очень благодарен Вам за этот урок.