Как передать массивы строк в другую функцию в C - PullRequest
0 голосов
/ 02 января 2019

Мне трудно понять, как передать случайные строки, которые я сгенерировал, из одной функции в другую.

Я хочу, чтобы строки, сгенерированные в функции inputAccounts(), передавались вfunction viewAllRecords().

Строки, сгенерированные из функции inputAccounts(), содержатся в массиве, и я хочу, чтобы они все еще находились в массиве при передаче в функцию viewAllRecords().

Вот моя программа:

int randomNumber(int min, int max);
char randomString(char *str, int randomCharCount);

int numOfAccounts;

int main()
{
    system("cls");
    showOptions();
}

int randomNumber(int min, int max)
{
    max -= min;
    return (rand() % max) +min;
}

char randomString(char *str, int randomCharCount)
{
    const char *charSet = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int i;
    for (i = 0; i < randomCharCount; i++)
    {
        str[i] = charSet[randomNumber(0, 61)];
    }
}

void showOptions()
{
    char choice;
    system("cls");
    printf("System");
    printf("\n[1] Sign up Account");
    printf("\n[2] View Records");
    printf("\n[3] Exit");
    scanf("%c", &choice);
    getchar();
    chosenOperation(choice);
    showOptions();
}

void inputAccounts()
{
    srand(time(NULL));
    char rStr[9] = {0};     // sStr is where the rStr are saved .
    char sStr[50][9];       // max 50 rStr
    randomString(rStr, 8);
    strcpy(sStr[numOfAccounts],rStr);
    printf("Random String Generated: %s\n", sStr[numOfAccounts]);
    numOfAccounts++;
    getch();
}

void chosenOperation(char choice)
{
    if(choice == '1')
    {
        inputAccounts();
    }
    else if(choice == '2')
    {
        chooseViewType();
    }
    else if(choice == '3')
    {
        exit(0);
    }
}

void viewAllRecords()
{
    srand(time(NULL));
    char rStr[9] = {0};     // sStr is where the rStr are saved .
    char sStr[50][9];       // max 50 rStr
    int i = 0;  
    system("cls");
    while(i < numOfAccounts)
    {
        randomString(rStr, 8);
        strcpy(sStr[i],rStr);
        printf("Random String Generated: %s\n", sStr[i]);
        i++;
    }
}

void chooseViewType()
{
    system("cls");
    int choice;
    printf("[1] View All Records\n");
    choice = getch();

    if(choice == '1')
    {
        viewAllRecords();
    }
    getch();
}

Пожалуйста, помогите, спасибо!

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Если я не пойму неправильно, что вы хотите сделать, функция inputAccounts() должна сгенерировать одну случайную строку, а функция v iewAllRecords() должна перечислить все сгенерированные случайные строки.Массив sStr определен внутри функцией inputAccounts(), поэтому он недоступен для функции viewAllRecords().Вы должны переместить массив в глобальный раздел кода или определить его как статический.Вы можете попробовать что-то вроде этого:

int randomNumber(int min, int max);
char randomString(char *str, int randomCharCount);

int numOfAccounts;
char sStr[50][9];       // String storage array defined globally

int main()
{
    system("cls");
    showOptions();
}

int randomNumber(int min, int max)
{
    max -= min;
    return (rand() % max) +min;
}

char randomString(char *str, int randomCharCount)
{
    const char *charSet = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int i;
    for (i = 0; i < randomCharCount; i++)
    {
        str[i] = charSet[randomNumber(0, 61)];
    }
}

void showOptions()
{
    char choice;
    system("cls");
    printf("System");
    printf("\n[1] Sign up Account");
    printf("\n[2] View Records");
    printf("\n[3] Exit");
    scanf("%c", &choice);
    getchar();
    chosenOperation(choice);
    showOptions();
}

void inputAccounts()
{
    srand(time(NULL));
    char rStr[9] = {0};     // sStr is where the rStr are saved .
    randomString(rStr, 8);
    strcpy(sStr[numOfAccounts],rStr);
    printf("Random String Generated: %s\n", sStr[numOfAccounts]);
    numOfAccounts++;
    getch();
}

void chosenOperation(char choice)
{
    if(choice == '1')
    {
        inputAccounts();
    }
    else if(choice == '2')
    {
        chooseViewType();
    }
    else if(choice == '3')
    {
        exit(0);
    }
}

void viewAllRecords()
{
    srand(time(NULL));
    int i = 0;  
    system("cls");
    while(i < numOfAccounts)
    {
        printf("Random String Generated: %s\n", sStr[i]);
        i++;
    }
}

void chooseViewType()
{
    system("cls");
    int choice;
    printf("[1] View All Records\n");
    choice = getch();

    if(choice == '1')
    {
        viewAllRecords();
    }
    getch();
}
0 голосов
/ 02 января 2019

В C при вызове функций переменные, объявленные в этой функции, создаются в «стеке», и этот стек автоматически удаляется при возврате функции.В inputAccounts вы определяете массивы в стеке, когда означает, что они не существуют, когда функция возвращается.Вы должны определить массив в «куче», используя динамическое распределение памяти, например, вызывая «malloc».Это позволит вам передать адрес между функциями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...