Kак проверить есть ли в массиве уже введенныe ранее юзером данные
#include <stdio.h>
#include <string.h>
struct test
{
float donation, total_donation;
char name[10], surname[10], year_of_birth[4], sex[2];
int pasport;
} users[200];
char secret_code_for_admin[10] = "adad";
char secret_name_for_admin[10] = "11a11";
int current_number_of_users = 0;
void retrial_login_for_user()
{
int user_name;
printf("User name: "); // if user will want to enter into the system he can enter with his pasport
scanf("%d", &user_name);
for (int i; i < 200; i++)
{
if (user_name == users[i].pasport)
{
printf("welcome back!");
}
else
printf("mistake");
}
}
void personal_information_of_user()
{
char reading_the_user_answer[10];
printf("To donate let us some following information\n");
printf("Name: ");
scanf("%s", users[current_number_of_users].name);
printf("Your surname: ");
scanf("%s", users[current_number_of_users].surname);
printf("Year of birth: ");
scanf("%s", users[current_number_of_users].year_of_birth);
printf("Your sex: ");
scanf("%s", users[current_number_of_users].sex);
printf("Your pasport: ");
scanf("%d", &users[current_number_of_users].pasport);
printf("Your donation is: ");
scanf("%f", &users[current_number_of_users].donation);
users[current_number_of_users].total_donation = users[current_number_of_users].donation - ((users[current_number_of_users].donation / 100) * 10);
printf("**************************************************************\n");
printf("The total sum of your donation with the included tax is: %.2f\n", users[current_number_of_users].total_donation);
printf("**************************************************************\n");
current_number_of_users++;
printf("Do you want to login in system?\nYes/no: ");
scanf("%s", reading_the_user_answer);
if (strcmp(reading_the_user_answer, "yes") == 0)
{
retrial_login_for_user();
}
}
void user_access()
{
int user_name;
char action_of_user[10];
printf("\nYou loged in as an User.\nYou have two avalable options\n");
printf("***************************************************************\n");
printf(" Donate or Login\n");
printf("***************************************************************\n");
printf("\nPlease make your choose by starting with a small letter:\n ");
scanf("%s", action_of_user);
if (strcmp(action_of_user, "donate") == 0)
{
personal_information_of_user();
}
if (strcmp(action_of_user, "login") == 0)
{
retrial_login_for_user();
}
}
void admin_access()
{
char choose_of_admin[20];
char pass_admin[10];
char pass_name_admine[10];
printf("User name: ");
scanf("%s", pass_admin);
while (strcmp(pass_admin, secret_code_for_admin))
{
printf("\nWrong Username.\nTry again: ");
scanf("%s", pass_admin);
}
printf("User name is correct.\n");
printf("Password: ");
scanf("%s", pass_name_admine);
while (strcmp(pass_name_admine, secret_name_for_admin))
{
printf("\nWrong password.\nTry again: ");
scanf("%s", secret_name_for_admin);
}
printf("***************************************************************\n");
printf(" All available options.\n");
printf("***************************************************************\n");
printf("View\nSearch\nDelete\nNotify\nEcoGift\nEcoCheck\nSort\nExit\n");
printf("\nPlease make your choose with a lowecase letter: ");
scanf("%s", choose_of_admin);
if (strcmp(choose_of_admin, "view") == 0)
{
printf("hi there");
}
}
int main()
{
char password_for_user[10];
char admin_or_user[10];
do
{
printf("Admin or user: ");
scanf("%s", admin_or_user);
} while (strcmp(admin_or_user, "admin") && strcmp(admin_or_user, "user"));
{
if (strcmp(admin_or_user, "admin") == 0)
{
admin_access();
}
if ((strcmp(admin_or_user, "user") == 0))
{
user_access();
}
}
}
Как проверить уже введенные юзером данные.
В данном случае я пытаюсь проверить с помощью цикла, если ранее введенный паспорт (которуй используется как User Name) совпадает с тем, что вводит пользователь, но код дальше if (user_name == users[i].pasport) не работает.
Ответы (2 шт):
вы проверяете номер паспорта с 200 другими номерами, при том, что
надо проверять только с тем кол-вом номеров, которые уже введены (т.е. нужен счётчик пользователей (не превышает 200)
поскольку вы проверяете со всеми 200, а введенных пользователей меньше, то в какой-то момент происходит сравнение с значением
users[i].pasportкоторый не определён (пользователей то меньше) и происходит падениевообще конечно пустые пользовательские данные неплохо было бы все таки чем-то инициализировать (хотя бы нулями)
pasportпишется какpassport:)
Короче говоря,я тогда посидела и увидела ,что в цикле for ,где for (int i; i < 200; i++); я не дала значение i=0. если испрабить на for (int i=0; i < 200; i++),то все работает.