Добавить функцию к программе - 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, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д