所以这里的C编程菜鸟。我正在研究一些练习题,我似乎无法弄清楚我在这个问题上犯了什么错误。
我很确定主函数如何抓取指针有错误,但我已经尝试了我能想到/读到的所有内容,并且不知道如何解决我的问题。
关于这个问题的更多信息 - 改变计算必须是一个函数,我编写了一个程序来获取用户的输入,然后通过该函数并吐出最少数量的账单/硬币。不小的变化(四分之一,硬币,镍币,便士),所以只需要int数。
#include <stdio.h>
#include <math.h>
int main(void)
{
/* local variable definition of enter amount*/
int dollars, *twenties, *tens, *fives, *toonies, *loonies;
printf("enter amount: ");
scanf("%d", &dollars);
printf("\nChange for $%d is:\n", dollars);
/* Calling pay_amount function to get smallest bills*/
printf("$20s: %d\n", &twenties);
printf("$10s: %d\n", &tens);
printf("$5s: %d\n", &fives);
printf("$2s: %d\n", &toonies);
printf("$1s: %d\n", &loonies);
return;
}
/*Function pay_amount declaration */
void pay_amount(int dollars, int *twenties, int *tens, int *fives, int *toonies, int *loonies)
{
while (dollars>=0);
*twenties = (dollars/20);
*tens = ((dollars%20)/10);
*fives = (((dollars%20)%10)/5);
*toonies = ((((dollars%20)%10)%5)/2);
*loonies = (((((dollars%20)%10)%5)%2));
}
enter amount: 120
Change for $120 is:
$20s: -4196336
$10s: -4196340
$5s: -4196344
$2s: -4196348
$1s: -4196352
答案 0 :(得分:1)
您的计划存在一些问题。以下是其中一些。
首先,你不希望你的实际变量成为指针,但是简单的int
可以指向:
int dollars, twenties, tens, fives, toonies, loonies;
其次,您需要将实际变量值传递给printf
,而不是其地址:
printf("$20s: %d\n", twenties);
printf("$10s: %d\n", tens);
printf("$5s: %d\n", fives);
printf("$2s: %d\n", toonies);
printf("$1s: %d\n", loonies);
第三,您实际上并没有打电话给pay_amount
功能。
第四,如果你要调用它,它将无限循环,因为你应该删除这个完全无关的循环:
while (dollars>=0);
第五;虽然这实际上并不是一个错误(它不会阻止您的程序以任何方式工作),但pay_amount
中的其他提醒操作是多余的:
*twenties = (dollars/20);
*tens = ((dollars%20)/10);
*fives = ((dollars%10)/5);
*toonies = ((dollars%5)/2);
*loonies = ((dollars%2));
第六,作为术语的注释,这与&#34;函数指针&#34;无关,它表示指向函数的指针,而不是传递给函数的指针。
答案 1 :(得分:-1)
你需要改变:
/* local variable definition of enter amount*/
int dollars, *twenties, *tens, *fives, *toonies, *loonies;
到
/* local variable definition of enter amount*/
int dollars, twenties, tens, fives, toonies, loonies;
函数pay_amount()是这样的:
pay_amount(int *dollars,int *twenties,int *tens,int *fives,int *toonies,int *loonies)
调用函数如下:pay_amount(&dollars, &twenties, etc);
并在pay_amount()内部,如下所示:
while (*dollars>=0);
*dollars/20;
*tens = ((*dollars%20)/10);