我是一名C ++程序员,试图掌握C语言的语法,我不明白为什么我在这个函数中使用指针时会得到垃圾值。
#include<stdio.h>
#include <math.h>
void separate(double, double *dollar, double *quarter, double *dime, double *nickle, double *penny);
int
main(void)
{
double amount = 38.39, change, paid = 40.0, dollar, quarter, dime, nickle, penny;
change = paid - amount;
separate(change, &dollar, &quarter, &dime, &nickle, &penny);
printf("Your total change is: $%d\n", change);
printf("Dollars: %d\n", dollar);
printf("Quarters: %d\n", quarter);
printf("Dimes: %d\n", dime);
printf("Nickles: %d\n", nickle);
printf("Pennies: %d\n", penny);
getchar();
return (0);
}
void separate(double change, double *dollar, double *quarter, double *dime, double *nickle, double *penny)
{
double coins;
coins = change - floor(change);
*dollar = floor(change);
*quarter = coins / 25;
coins = coins - (*quarter * 25);
*dime = coins / 10;
coins = coins - (*dime * 10);
*nickle = coins / 5;
*penny = coins - (*nickle * 5);
}
答案 0 :(得分:2)
您正在使用%d打印双打!尝试%f
printf("Your total change is: $%f\n", change);
printf("Dollars: %f\n", dollar);
printf("Quarters: %f\n", quarter);
printf("Dimes: %f\n", dime);
printf("Nickles: %f\n", nickle);
printf("Pennies: %f\n", penny);
答案 1 :(得分:1)
事实上。相反不直观,但printf语句中的%d用于整数。尝试使用%f打印浮点数字。
我还建议你看一下this:
答案 2 :(得分:1)
您尝试使用%d
,printf
打印双变量,然后将double(或部分)的内存作为整数变量的内存,因为printf
使用{ {1}}作为参数的指针,如果你指定了不合适的格式,arg点的类型也会出错。
将所有va_list
替换为%d
。
答案 3 :(得分:1)
我怀疑你的问题是你没有正确分工。
看看:
void separate(double change, double *dollar, double *quarter, double *dime, double *nickle, double *penny)
{
// for your example, change is initially 1.61
double coins;
coins = change - floor(change); // .61
*dollar = floor(change); // 1
*quarter = coins / 25; // .0244
coins = coins - (*quarter * 25); // 0
*dime = coins / 10; // 0
coins = coins - (*dime * 10); // 0
*nickle = coins / 5; // 0
*penny = coins - (*nickle * 5); // 0
}
整数除法和浮点除法的工作方式不同。你应该乘以100得到分数,除以25得到宿舍数,然后乘以得到一个整数。
*quarters = floor(coins * (100 / 25)); // floor(2.44) = 2
coins = coins - *quarters * 25; // .11
根据需要重复以获得其他硬币的数量。
另外,其他人都提到你使用%d
来打印双打而不是%f
(%d
是一个整数格式的字符串)所以我也会提到它,因为这是问题的一部分。