Добавить функцию к программе - 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");
 }
 
 }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с памятью, строками и математическими функциями
  2. Объявляем структуру данных «stack», которая содержит информацию о пользователе (ключ, пароль и имя) и указатель на следующий элемент в списке
  3. Создаем функции «UserCreate», «UserList» и «FindUser», которые будут работать с данными в структуре «stack»
  4. В функции «main» создаем начальный элемент списка (root) и инициализируем его значением NULL
  5. Создаем массив «myUsers», который содержит данные пользователей для добавления в список
  6. Используем цикл для добавления каждого пользователя из массива в список с помощью функции «UserCreate»
  7. Выводим список пользователей с помощью функции «UserList»
  8. Запрашиваем имя пользователя для поиска и сохраняем его в переменной «search»
  9. Используем функцию «FindUser», чтобы найти пользователей с указанным именем и вывести результаты поиска
  10. Освобождаем память, выделенную под список пользователей, с помощью функции «free»
  11. Возвращаем значение 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5
Похожие ответы