C 中的简单更改程序;不懂初始化
simple change-making program in C; Not understanding initializing
我已经用初学者的 C class 编写了一个程序几天了。我已经编写、重写、分解和重写了这段代码,在几乎没有帮助的情况下用谷歌搜索我所有的问题。我怀疑我做错了什么很简单,但我想我只是不明白。
该程序旨在提示收银员输入价格、支付的金额、计算零钱,并告诉收银员每张纸币/硬币要退还多少。从 void main(void) 到 change=round 的代码是由我的导师提供的。我知道这就是我应该如何将双精度数转换为整数。花了很长时间才弄清楚 lf 是唯一适用于我的 scanf 的格式,我的导师特别要求使用大量定义。
当程序在运行时,它成功提示输入价格和支付金额,但始终输出更改为–2,147,483,648(我知道这是int的最低值)。但是,我不知道 为什么 它会选择该值。 change = round 的数学计算,它计算付费 - 成本,由我的导师提供,我没有玩弄它。
此外,对于 //Change List 下列出的 "twenties, tens, fives," 等,我的编译器向我发出警告“_____ 未初始化用于此函数”。当我在顶部将它们列为 int 时,我以为我已经初始化了它们?到目前为止,我的导师描述事物的方式对我来说似乎有点深奥,所以我确定我只是错过了一些非常简单的东西。对 int 和 int* 之间的区别的任何解释,或者为什么 %f 在我列出 %lf 后不能工作的地方也将不胜感激,因为它们以前让我头疼,并获得互联网奖励积分。
提前致谢。希望我格式化好了。
#include <stdio.h>
#define TWENTY 2000
#define TEN 1000
#define FIVE 500
#define SINGLE 100
#define QUARTER 25
#define DIME 10
#define NICKEL 5
#define PENNY 1
void main(void)
{
int round(double num)
{
return (int) (num + 0.5);
}
int change, // to be paid, in cents
twenties, tens, fives, singles, quarters, dimes, nickels, pennies;
//bills and coins used
double cost, // item cost, in dollars and cents
paid; // amount paid, in dollars and cents
change = round((paid - cost) * 100.0);
//Ask for cost
printf("Enter amount cost ($): ");
scanf("%lf", &cost);
//Ask for amount paid
printf("Enter amount tendered ($): ");
scanf("%lf", &paid);
//Change list
printf("Change is: %d\n", change);
printf(" bills: %d\n", twenties);
printf(" bills: %d\n", tens);
printf(" bills: %d\n", fives);
printf(" bills: %d\n", singles);
printf("Quarters: %d\n", quarters);
printf("Dimes: %d\n", dimes);
printf("Nickels: %d\n", nickels);
printf("Pennies: %d\n", pennies);
//Calculations
twenties = (change / TWENTY);
change = (change % TWENTY);
tens = (change / TEN);
change = (change % TEN);
fives = (change / FIVE);
change = (change % FIVE);
singles = (change / SINGLE);
change = (change % SINGLE);
}
主要问题是你确实打印出了未初始化的变量:
// Here they are:
int change, twenties, tens, fives, singles, quarters, dimes, nickels, pennies;
// Then you print it out, still unitialized:
printf(" bills: %d\n", twenties);
// Then you give it a value
twenties = (change / TWENTY);
块中的语句按照语句出现的顺序发生。赋值表示立即计算;它没有为将来(或过去)的应用设置公式。
要解决此问题,您需要将所有赋值语句(twenties =
等)移动到 printf
语句之前。
你和 change
犯了同样的错误。首先你写:
// here "paid" and "cost" are uninitialized
change = round((paid - cost) * 100.0);
然后你给他们值:
// too late, horse has bolted
scanf("%lf", &cost);
scanf("%lf", &paid);
在计算更改之前需要输入金额。这必须是在从零钱计算硬币之前。
另一件事是 round
函数应该移动到 main()
开始之前。在标准 C 中,嵌套函数定义是非法的。
我已经用初学者的 C class 编写了一个程序几天了。我已经编写、重写、分解和重写了这段代码,在几乎没有帮助的情况下用谷歌搜索我所有的问题。我怀疑我做错了什么很简单,但我想我只是不明白。
该程序旨在提示收银员输入价格、支付的金额、计算零钱,并告诉收银员每张纸币/硬币要退还多少。从 void main(void) 到 change=round 的代码是由我的导师提供的。我知道这就是我应该如何将双精度数转换为整数。花了很长时间才弄清楚 lf 是唯一适用于我的 scanf 的格式,我的导师特别要求使用大量定义。
当程序在运行时,它成功提示输入价格和支付金额,但始终输出更改为–2,147,483,648(我知道这是int的最低值)。但是,我不知道 为什么 它会选择该值。 change = round 的数学计算,它计算付费 - 成本,由我的导师提供,我没有玩弄它。
此外,对于 //Change List 下列出的 "twenties, tens, fives," 等,我的编译器向我发出警告“_____ 未初始化用于此函数”。当我在顶部将它们列为 int 时,我以为我已经初始化了它们?到目前为止,我的导师描述事物的方式对我来说似乎有点深奥,所以我确定我只是错过了一些非常简单的东西。对 int 和 int* 之间的区别的任何解释,或者为什么 %f 在我列出 %lf 后不能工作的地方也将不胜感激,因为它们以前让我头疼,并获得互联网奖励积分。
提前致谢。希望我格式化好了。
#include <stdio.h>
#define TWENTY 2000
#define TEN 1000
#define FIVE 500
#define SINGLE 100
#define QUARTER 25
#define DIME 10
#define NICKEL 5
#define PENNY 1
void main(void)
{
int round(double num)
{
return (int) (num + 0.5);
}
int change, // to be paid, in cents
twenties, tens, fives, singles, quarters, dimes, nickels, pennies;
//bills and coins used
double cost, // item cost, in dollars and cents
paid; // amount paid, in dollars and cents
change = round((paid - cost) * 100.0);
//Ask for cost
printf("Enter amount cost ($): ");
scanf("%lf", &cost);
//Ask for amount paid
printf("Enter amount tendered ($): ");
scanf("%lf", &paid);
//Change list
printf("Change is: %d\n", change);
printf(" bills: %d\n", twenties);
printf(" bills: %d\n", tens);
printf(" bills: %d\n", fives);
printf(" bills: %d\n", singles);
printf("Quarters: %d\n", quarters);
printf("Dimes: %d\n", dimes);
printf("Nickels: %d\n", nickels);
printf("Pennies: %d\n", pennies);
//Calculations
twenties = (change / TWENTY);
change = (change % TWENTY);
tens = (change / TEN);
change = (change % TEN);
fives = (change / FIVE);
change = (change % FIVE);
singles = (change / SINGLE);
change = (change % SINGLE);
}
主要问题是你确实打印出了未初始化的变量:
// Here they are:
int change, twenties, tens, fives, singles, quarters, dimes, nickels, pennies;
// Then you print it out, still unitialized:
printf(" bills: %d\n", twenties);
// Then you give it a value
twenties = (change / TWENTY);
块中的语句按照语句出现的顺序发生。赋值表示立即计算;它没有为将来(或过去)的应用设置公式。
要解决此问题,您需要将所有赋值语句(twenties =
等)移动到 printf
语句之前。
你和 change
犯了同样的错误。首先你写:
// here "paid" and "cost" are uninitialized
change = round((paid - cost) * 100.0);
然后你给他们值:
// too late, horse has bolted
scanf("%lf", &cost);
scanf("%lf", &paid);
在计算更改之前需要输入金额。这必须是在从零钱计算硬币之前。
另一件事是 round
函数应该移动到 main()
开始之前。在标准 C 中,嵌套函数定义是非法的。