Как создать переменную типа char **, используя структуры - PullRequest
0 голосов
/ 16 апреля 2019

В настоящее время я изучаю структуры в C, и у меня возникли некоторые проблемы при работе со структурами и массивами, мне нужно создать код, который использует структуру, содержащую переменную char **, а затем мне нужно используйте эту структуру для создания двух строк char ** и используйте их для хранения некоторых строк.

К сожалению, мне не удалось создать эти две строки символов **. ребята, вы можете мне помочь?

P.S .: Если вы можете объяснить мне, как использовать структуры с массивами и динамическими массивами / строками, я был бы очень рад, мне нужно понять это для другого вопроса :)

Вот что я уже сделал:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 4
#define MIN 1

typedef struct lists
{
    char** reasons;
}lists;

int welcomeAndInput(char** pros, char** cons);
void addCon(char** cons);
void addPro(char** pros);

int main(void)
{
    int result = 1;
    lists cons = { (char**)malloc(sizeof(char*) * 1) };
    lists pros = { (char**)malloc(sizeof(char*) * 1) }; 
    while (result != 0)
    {
        result = welcomeAndInput(pros, cons);
    }
    getchar();
    return 0;
}

int welcomeAndInput(char** pros, char** cons)
{
    int result = 0;
    printf("Choose an option: \n");
    printf("1: Add a PRO reason \n");
    printf("2: Add a CON reason \n");
    printf("3: Print your reasons\n");
    printf("4: Exit \n");
    scanf("%d", &result);
    getchar();
    while (result != 0)
    {
        switch (result)
        {
            case 1:
            {
                addPro(pros);
                break;
            }
            case 2:
            {
                addCon(cons);
                break;
            }
            case 3:
            {
                break;
            }
            case 4:
            {
                result = 0;
                break;
            }
            default:
            {
                while (result < MIN || result > MAX)
                {
                    printf("Enter a valid input!");
                    scanf("%d", &result);
                }
            }
        }
    }
}

void addPro(char** pros)
{

}

void addCon(char** cons)

Спасибо!

P.S -V2: Итак, я заметил, что на самом деле дал вам неправильный код, вот код со всем, что мне удалось сделать. Я знаю, что вызов welcomeAndInput неправильный:)

1 Ответ

0 голосов
/ 17 апреля 2019

Я просто добавил несколько материалов, и это не полное решение, но оно поможет вам решить ваше решение, я не освободил выделенную память, вы можете опубликовать окончательное / завершенное решение.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 4
#define MIN 1

typedef struct list
{
    char** reason;
}lists;

int welcomeAndInput(lists *pros, lists* cons);
//void addCon(char** cons);
//void addPro(char** pros);
void addreason(lists* pros);

int main(void)
{
    int result = 1;
    lists cons = { (char**)malloc(sizeof(char*) * 1) };
    lists pros = { (char**)malloc(sizeof(char*) * 1) };


    while (result != 0)
    {
        result = welcomeAndInput(&pros, &cons);
    }
        printf("reason : %s \n",pros.reason[0] );

    getchar();
    return 0;
}

int welcomeAndInput(lists *pros, lists* cons)
{
    int result = 0;
    printf("Choose an option: \n");
    printf("1: Add a PRO reason \n");
    printf("2: Add a CON reason \n");
    printf("3: Print your reasons\n");
    printf("4: Exit \n");
    scanf("%d", &result);
    //getchar();
    //while (result != 0)
    {
        switch (result)
        {
            case 1:
            {
                addreason(pros);
                break;
            }
            case 2:
            {
                addreason(cons);
                break;
            }
            case 3:
            {
                break;
            }
            case 4:
            {
                result = 0;
                break;
            }
            default:
            //{
            //    while (result < MIN || result > MAX)
                //{
                    printf("Invalid input!");
              //      scanf("%d", &result);
                //}
            //}*/
        }
    }
    return result;
}

void addreason(lists* pros)
{
    char *reason = malloc(sizeof(char) * 256);
    int count=0;
        printf("enter reason :");
        getchar();
            while (count <256){

                reason[count]=getchar();
                if ('\n' == reason[count])
                    break;
                count++;
            }

//fgets(reason, 256, stdin);//   
     pros->reason[0]=reason;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...