Есть ли способ передать значение из одной функции в основную функцию для цикла? - PullRequest
0 голосов
/ 10 ноября 2019

Я пишу банковскую программу для назначения. Я сделал базовую программу, которая не имеет функций. Теперь мне нужно добавить две функции для замены частей кода. Я выбираю замену пользовательских циклов ввода для сумм пополнения и снятия. Я могу заставить функцию нормально работать с запросом номера, но когда я пытаюсь использовать цикл, запрашивающий суммы депозита, он не работает должным образом. Я думаю, что моя ограничивающая переменная цикла не переносится из-за того, что она поступает из другой функции. Есть ли способ получить эту ограничивающую переменную. Я включил части кода, который задействован.

int deposit_message (void)
{
    int d;
    do
    {
        printf("\nEnter the number of deposits (0-5): ");
        scanf("%i", &d);

        /* Define rules for invalid answers */
        /* -------------------------------- */

        if( d < 0 || d > 5)
        {
            printf("*** Invalid number of deposits, please re-enter.");
        }
    }while( d < 0 || d > 5); /* end of loop */
    return d;
} /* end of function */

/* Prompt user for positive deposits, if invalid re-prompt. */
    /* -------------------------------------------------------- */

    for( i=0; i < d; i++)
    {
                                            /* Create array for deposits */
        do
        {
            printf("Enter the amount of deposit #%i: ", i +1);
            scanf("%f", &deposit[i]);

            /* Define rules for invalid answers */
            /* -------------------------------- */

            if(deposit[i] < 0.00)
            {
                printf("*** Deposit amount must be greater than zero, please re-enter.\n");
            }

        }while(deposit[i] < 0.00);
Revised code after attempting to pass the variable d. 
void deposit_message (int d)
{

    do
    {
        printf("\nEnter the number of deposits (0-5): ");
        scanf("%i", &d);

        /* Define rules for invalid answers */
        /* -------------------------------- */

        if( d < 0 || d > 5)
        {
            printf("*** Invalid number of deposits, please re-enter.");
        }
    }while( d < 0 || d > 5); /* end of loop */
    return d;
} /* end of function */


    /* Prompt user for number of deposits between 0 and 5 with function, if invalid re-prompt with loop. */
    /* ----------------------------------------------------------------------------------- */

    deposit_message(&d);

/* Prompt user for positive deposits, if invalid re-prompt. */
    /* -------------------------------------------------------- */

    for( i=0; i < d; i++)
    {
                                            /* Create array for deposits */
        do
        {
            printf("Enter the amount of deposit #%i: ", i +1);
            scanf("%f", &deposit[i]);

            /* Define rules for invalid answers */
            /* -------------------------------- */

            if(deposit[i] < 0.00)
            {
                printf("*** Deposit amount must be greater than zero, please re-enter.\n");
            }

        }while(deposit[i] < 0.00);

Цикл должен запрашивать сумму депозита X раз в зависимости от количества депозитов, выбранных пользователем. При использовании он либо не остановится, либо просто один раз. (После попытки его пересмотреть цикл не останавливается.

1 Ответ

0 голосов
/ 10 ноября 2019

Вы должны передать ссылку на переменную d , определенную в методе main () , в deposit_message () , как показано ниже.

void deposit_message(int* d){
    // take value of deposits from user
    scanf("%d",d);
 }

 int main(){
    int d; 
    deposit_message(&d);

    //  your code here...
    //  your loop 
    for(int i=0;i<d;i++){
        // logic here
    }
 }
...