0

这个问题太长太复杂,无法放在标题中,所以我会在这里尝试描述它:

循环提示输入 4 个选项 (1,2,3,q),如果输入 1,则在 accounts[MAX] 数组中输入帐户 #。如果帐户的总索引 # 大于 10,则它不再接受输入,但如果帐户 [5] 和帐户 [11] 具有相同的帐户 #(均为 1400),则它继续接受它。如何检查两个帐户是否相同以及是否允许输入输入?

到目前为止我的代码:

do
{
    printf ("Options Available: \n");
    printf ("\n 1 - Enter a transaction");
    printf ("\n 2 - View the general journal");
    printf ("\n 3 - View the balance sheet");
    printf ("\n q - Quit the program\n");

    printf ("\nPlease enter 1, 2, 3 or q: ");

    option = validateoption();

    if (option == '1' && totalinput >= MAXtrans)
        printf (" **Maximum number of transactions have been entered\n\n");

    if (option == '1')
    {
        printf ("\nEnter an account number (between 1000 and 3999): ");
        accounts[i] = validateaccount();
        printf ("\n");

        printf ("Enter d (debit) or c (credit): ");
        debcred[i] = validatedebcred();
        printf ("\n");

        printf ("Enter transaction amount: ");
        amount[i] = validateamount();
        printf ("\n");

        printf ("\n");

        i++;
        totalinput++;

    }

    if (option == '2')
        journal(accounts, debcred, amount, &totalinput);

    if (option == '3')
        balancesheet(accounts, debcred, amount, &totalinput);

} while (option != 'q');

因此,在 accounts[i] 中,如果输入了 10 个帐户,则它不再接受更多帐户,但如果我输入 account # 1400 和 account[3] 或者我们也有 account # of 1400,那么它会接受该输入,因为它们是相同的帐户和帐户总数仍然相同。

我的验证帐户功能:

long validateaccount() {  // VALIDATE INPUT FOR ACCOUNT # IN TRANSACTION FUNCTION

    int keeptrying = 1, rc;
    long i;
    char after;

    do
    {
        rc = scanf ("%ld%c", &i, &after);

        if (rc == 0)
        {
            printf (" **Invalid input try again: ");
            clear();
        }
        else if (after != '\n')
        {
            printf (" **Trailing characters try again: ");
            clear();
        }
        else if (i < 1000 || i > 3999)
        {
            printf (" **Invalid input try again: ");
        }
        else
        {
                keeptrying = 0;
        }

    } while (keeptrying == 1);

    return i;

}

编辑:这是它应该显示的示例输出,希望那更清楚?

可用选项:

1 - 输入交易 2 - 查看一般日记帐 3 - 查看资产负债表 q - 退出程序

请输入 1、2、3 或 q:1

输入帐号(介于 1000 和 3999 之间):3999

输入 d(借方)或 c(贷方):d

输入交易金额:10000

可用选项:

1 - 输入交易 2 - 查看一般日记帐 3 - 查看资产负债表 q - 退出程序

请输入 1、2、3 或 q:1

输入帐号(介于 1000 和 3999 之间):3998 **已输入最大帐号数

可用选项:

1 - 输入交易 2 - 查看一般日记帐 3 - 查看资产负债表 q - 退出程序

请输入 1、2、3 或 q:1

输入帐号(介于 1000 和 3999 之间):3999

输入 d(借方)或 c(贷方):c

输入交易金额:1000


所以发生的情况是先输入 3999 帐户 #,然后在输入 3999 之后输入 3998,但在输入 3999 之后,已填满最大帐户数(10 个帐户或帐户 [10]),但在输入 3998 之后,帐户 # 3999 是再次输入并且程序接受了该输入。如果仍然不清楚,我会尝试解释更多!

4

1 回答 1

0

ifi表示输入的账户数(注意我不知道你是否正确管理了错误的状态),j表示元素的位置,认为long int变量存储在数组account中,我会假设你要添加一个状态更新。

因此,在 accounts[i] 中,如果输入了 10 个帐户,则它不再接受更多帐户,但如果我输入 account # 1400 和 account[3] 或者我们也有 account # of 1400,那么它会接受该输入,因为它们是相同的帐户和帐户总数仍然相同。

if ( option == '1' )
{
    long int j;

    /* k represents position */
    int k;

    printf ("\nEnter an account number (between 1000 and 3999): ");

    /* If is the last try and the account is inside the array let's update it. */
    /* Pass by reference k. */
    if( ( i == 10 ) && ( isAccount( validateaccount(), &k ) == 1 ) ){ 
        accounts[ k ] = validateaccount();
        printf ("\n");

        printf ("Enter d (debit) or c (credit): ");
        debcred[ k ] = validatedebcred();
        printf ("\n");

        printf ("Enter transaction amount: ");
        amount[ k ] = validateamount();
        printf ("\n");
        printf ("\n");

        i++;
    }

    /* Pass by reference k. */
    else if( ( i == 10 ) && ( isAccount( validateaccount(), &k ) == 0 ) ){

        printf (" Your input isn't allowed cause the account is not in the list. \n");

    }

    else{
        accounts[ i ] = validateaccount();
        printf ("\n");

        printf ("Enter d (debit) or c (credit): ");
        debcred[ i ] = validatedebcred();
        printf ("\n");

        printf ("Enter transaction amount: ");
        amount[ i ] = validateamount();
        printf ("\n");
        printf ("\n");

        i++;
    }
}


/* I will think your array is a global variable, let's use a pass by reference function. */
int isAccount( long int a, int * k )
{
    int result = 0;
    int counter, j;

    for( counter = 0; counter < 11; counter++ ){
        if( accounts[ counter ] == a ){
            * k = counter;
            return 1;
        } 
    }
    return 0;
}

PD:你可以使用structs它会容易 10 倍。

于 2012-11-20T02:58:08.077 回答