首页 文章

c得错了答案

提问于
浏览
-5

编写程序以分发更改 . 用户输入已支付的金额和到期金额 . 该程序确定应该给出多少美元,四分之一,硬币,硬币和便士作为变化 . 向用户询问main()中的两个输入(到期金额和支付金额),然后将这些输入与指向5个参数(美元,四分之一,硬币,镍币,便士)的指针一起发送到名为change()的函数,然后这个函数会计算每个给出的数量 . 从main()打印结果 .

所以我的程序正在编译好,但我得到了错误的答案 . 我究竟做错了什么 .

#include <stdio.h>
#include <conio.h>

//function prototype
void change( int *d, int *q, int *di, int *n, int *p, int paid, int due );


int main()
{
    //variables
    int paid;
    int due;
    int dollars;
    int quarters;
    int dimes;
    int nickels;
    int pennies;

    //reference variables
    int *d;
    int *q;
    int *di;
    int *n;
    int *p;

    printf( "Enter amount due: \n" );
    scanf( "%d", &due );

    printf( "Enter amount paid: \n" );
    scanf( "%d", &paid );

    change( &dollars, &quarters, &dimes, &nickels, &pennies, paid, due );

    printf( "Dollars = %d\nquarters = %d\ndimes =%d\nnickels = %d\npennies = %d", dollars, quarters, dimes, nickels, pennies );

    getch();
    return 0;
}

void change(int *d,int *q,int *di, int *n, int *p, int paid, int due )
{
    int dollarChange;
    int quarterChange;
    int dimeChange;
    int nickelChange;
    int pennyChange;
    int modu;
    int modu2;
    int modu3;
    int total;
    int penniestotal;

    total = due - paid;

    penniestotal = total * 100;

    dollarChange = penniestotal / 100;
    modu = penniestotal % 100;
    quarterChange = modu / 25;
    modu2 = modu % 25;
    dimeChange = modu2 / 10;
    modu3 = modu2 % 10;
    nickelChange = modu3 / 5;
    pennyChange = modu3 % 5;
}

1 回答

  • 2

    change() 需要很多指针作为参数,但这些指针从未在函数中使用过 . 也没有回报 Value .

    这意味着你在 check() 中所做的一切都不重要 .

    您正在从输入中读取 duepaid ,然后调用无关紧要的函数,然后打印大量未初始化的变量进行输出 .

    Postscriptum:

    到目前为止,您已经提出了五个问题,每个问题都遵循类似的模式:解释您的程序应该执行的操作,“它不起作用”和代码转储 .

    这不是StackOverflow或任何其他Q&A网站的工作方式 .

    例如,你的问题不是"calculating change",而是"parameter passing" . 与您发布的所有其他问题一样,可以想象的是,最多可以用十行代码表示 . 您将更改计算转储给我们显示您缺乏努力,这就是您继续获得投票的原因 .

    Postscriptum 2:

    我访问了你的其他问题 . 五个问题中有四个基本相同:您还没有理解指针和参数传递是如何工作的 . 既然你的问题太模糊了,那么你会得到满满的答案,而这些答案并没有做到,你的程序实际上每次尝试都会变得更糟......

    因此,为了您的考虑,一个程序执行一些指向和参数传递,它是正确的,一次只有一个参数,并且它正在做什么非常冗长 . 研究它,它真的一次性回答你的最后四个问题:

    #include <stdio.h>
    
    void function( int * parameter )
    {
        int local = 987;
    
        printf( "Address of 'local' is:                     %p\n", &local );
        printf( "Value of 'local' is:                       %d\n\n", local );
    
        printf( "Address that 'parameter' points to is:     %p\n", parameter );
        printf( "Value at that address is:                  %d\n\n", *parameter );
    
        puts( "Switching 'parameter' to point to 'local'...\n" );
    
        int * copy_of_parameter = parameter;
    
        parameter = &local;
    
        printf( "Address that 'parameter' NOW points to is: %p\n", parameter );
        printf( "Value at that address is:                  %d\n\n", *parameter );
    
        puts( "Changing value of 'local' through 'parameter'...\n" );
    
        *parameter = 0;
    
        printf( "Address that 'parameter' points to is:     %p\n", parameter );
        printf( "Value at that address is:                  %d\n\n", *parameter );
    
        puts( "Making 'parameter' point at the old address again...\n" );
    
        parameter = copy_of_parameter;
    
        *parameter = 666;
    
        printf( "Address that 'parameter' NOW points to is: %p\n", parameter );
        printf( "Value at that address is:                  %d\n\n", *parameter );
    
        return;
    }
    
    
    int main()
    {
        int in_main = 123;
    
        printf( "Address of 'in_main' is:                   %p\n", &in_main );
        printf( "Value at that address is:                  %d\n\n", in_main );
    
        puts( "Calling function()...\n" );
    
        function( &in_main );
    
        puts( "Returned from function()...\n" );
    
        printf( "Address of 'in_main' is:                   %p\n", &in_main );
        printf( "Value at that address is:                  %d\n\n", in_main );
    
        return 0;
    }
    

相关问题