Добавить функцию к программе - C (СИ)
Формулировка задачи:
Написать к этой программе функцию, которая выводит значения полей указанной пользователем структуры. Например, пользователь пишет имя и получает остальные сведения о человеке.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stack {
int UserKey;
char* UserPassword;
char* User;
// ------------------
struct stack *next;
};
/* functions */
// #key #pass #name
struct stack *UserCreate( struct stack *, int, char*, char* );
void UserList( struct stack * );
struct stack *FindUser( struct stack *, char* );
/* main */
main() {
struct stack *root = NULL;
struct arrUsers {
char* User;
char* UserPassword;
};
arrUsers myUsers[] = {
{ "Jester", "123456" },
{ "Joy", "qwerty" },
{ "Martin", "microsoft" },
{ "Test", "test passwor4d" },
};
for( int idx = 0; idx < sizeof(myUsers) / sizeof(struct arrUsers); idx++ ) {
int userkey = rand() % 8998 + 1000;
root = UserCreate( root, userkey, myUsers[ idx ].UserPassword, myUsers[ idx ].User );
}
UserList( root );
char* search = "J";
FindUser( root, search );
free( root );
system( "pause" );
}
/* user functions */
struct stack *UserCreate( struct stack *root, int key, char* password, char* name ) {
struct stack *user;
user = ( struct stack * ) malloc ( sizeof( struct stack ) );
user->next = root;
user->UserKey = key;
user->UserPassword = password;
user->User = name;
return user;
}
void UserList( struct stack *user ) {
printf("\nUser list:\n");
while( user != NULL ) {
printf(" > '%s' \t :: id '%i' ( password - %s ) \n", user->User, user->UserKey, user->UserPassword );
user = user->next;
}
printf("\n");
}
struct stack *FindUser( struct stack *root, char* name ) {
int count_result = 0;
printf("\nUser search result:\n");
while( root != NULL ) {
if( strstr( name, root->User ) ) {
printf(" > '%s' \t :: id '%i' ( password - %s ) \n", root->User, root->UserKey, root->UserPassword );
count_result++;
}
root = root->next;
}
if( !count_result ) {
printf("Users not found!\n");
}
}Решение задачи: «Добавить функцию к программе»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
struct stack {
int UserKey;
char* UserPassword;
char* User;
// ------------------
struct stack *next;
};
/* functions */
// #key #pass #name
struct stack *UserCreate( struct stack *, int, char*, char* );
void UserList( struct stack * );
void FindUser( struct stack *root, char* name );
/* --------------------------------------------------------------------------------------main */
int main() {
struct stack *root = NULL;
srand ((unsigned int)time (NULL));
struct arrUsers {
char* User;
char* UserPassword;
};
arrUsers myUsers[] = {
{ "Jester", "123456" },
{ "Joy", "qwerty" },
{ "Martin", "microsoft" },
{ "Test", "test passwor4d" },
};
int N = sizeof(myUsers) / sizeof(struct arrUsers);
for( int idx = 0; idx < N; idx++ ) {
int userkey = rand() % 8998 + 1000;
root = UserCreate( root, userkey, myUsers[ idx ].UserPassword, myUsers[ idx ].User );
}
UserList( root );
char search[20];
printf("Enter the name for search:\t");
fgets(search, 20, stdin);
if (search [strlen(search) - 1] == '\n')
search [strlen(search) - 1] = '\0';
FindUser( root, search );
free( root );
getchar();
return 0;
}
/*---------------------------------------------------------------------------------------------*/
/* user functions */
struct stack *UserCreate( struct stack *root, int key, char* password, char* name ) {
struct stack *user;
user = ( struct stack * ) malloc ( sizeof( struct stack ) );
user->next = root;
user->UserKey = key;
user->UserPassword = password;
user->User = name;
return user;
}
void UserList( struct stack *user ) {
printf("\nUser list:\n");
while( user != NULL ) {
printf(" > '%s' \t :: id '%i' ( password - %s ) \n", user->User, user->UserKey, user->UserPassword );
user = user->next;
}
printf("\n");
}
void FindUser( struct stack *root, char* name ) {
int count_result = 0;
printf("\nUser search result:\n");
while( root != NULL ) {
if( strstr( name, root->User ) ) {
printf(" > '%s' \t :: id '%i' ( password - %s ) \n", root->User, root->UserKey, root->UserPassword );
count_result++;
}
root = root->next;
}
if( !count_result ) {
printf("Users not found!\n");
}
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с памятью, строками и математическими функциями
- Объявляем структуру данных «stack», которая содержит информацию о пользователе (ключ, пароль и имя) и указатель на следующий элемент в списке
- Создаем функции «UserCreate», «UserList» и «FindUser», которые будут работать с данными в структуре «stack»
- В функции «main» создаем начальный элемент списка (root) и инициализируем его значением NULL
- Создаем массив «myUsers», который содержит данные пользователей для добавления в список
- Используем цикл для добавления каждого пользователя из массива в список с помощью функции «UserCreate»
- Выводим список пользователей с помощью функции «UserList»
- Запрашиваем имя пользователя для поиска и сохраняем его в переменной «search»
- Используем функцию «FindUser», чтобы найти пользователей с указанным именем и вывести результаты поиска
- Освобождаем память, выделенную под список пользователей, с помощью функции «free»
- Возвращаем значение 0, чтобы указать, что программа успешно завершилась