C 查找浮动变量的%Mod
我不想找人来写我的代码,但我正在做一个家庭作业,我们应该用%来改变。到目前为止,我的代码似乎是有效的(如果我输入成本为5,投标金额为10,它会显示我的更改为5美元,并显示“$5账单:1”)。然而,当我输入一个十进制数(即:成本$5.25)时,它跳过其余的提示并输出一个随机数。我在正确的轨道上吗?或者有人能给我指点一下教程的方向吗C 查找浮动变量的%Mod,c,C,我不想找人来写我的代码,但我正在做一个家庭作业,我们应该用%来改变。到目前为止,我的代码似乎是有效的(如果我输入成本为5,投标金额为10,它会显示我的更改为5美元,并显示“$5账单:1”)。然而,当我输入一个十进制数(即:成本$5.25)时,它跳过其余的提示并输出一个随机数。我在正确的轨道上吗?或者有人能给我指点一下教程的方向吗 #include <stdio.h> int main(void) { int cost, tender,
#include <stdio.h>
int main(void)
{
int cost,
tender,
change,
twenties,
tens,
fives,
ones,
quarters,
dimes,
nickles,
pennies;
printf("Please enter cost ($): ");
scanf("%d", &cost);
printf("Please enter amount tendered ($): ");
scanf("%d", &tender);
change = tender - cost;
printf("\nChange is $%i\n", change);
change = ((tender - cost) * 100.0);
twenties = change / 2000;
printf("\n$20 bills: %i\n", twenties);
change = change % 2000;
tens = change / 1000;
printf("$10 bills: %i\n", tens);
change = change % 1000;
fives = change / 500;
printf("$5 bills: %i\n", fives);
change = change % 500;
ones = change / 100;
printf("$1 bills: %i\n", ones);
change = change % 100;
quarters = change / 25;
printf("Quarters: %i\n", quarters);
change = change % 25;
dimes = change / 10;
printf("Dimes: %i\n", dimes);
change = change % 10;
nickles = change / 5;
printf("Nickles: %i\n", nickles);
change = change % 5;
pennies = change / 1;
printf("Pennies: %i\n", pennies);
return (0);
}
#包括
内部主(空)
{
整数成本,
柔软的
改变
二十几岁,
经皮电刺激神经疗法,
五,
一个,,
住处,
一角硬币,
尼克,
便士;
printf(“请输入成本($):”;
scanf(“%d”和“成本”);
printf(“请输入投标金额($):”;
scanf(“%d”和“投标书”);
变更=投标-成本;
printf(“\n更改为$%i\n”,更改);
变更=((投标-成本)*100.0);
二十岁=变化/2000年;
printf(“\n$20票据:%i\n”,20);
更改=更改%2000;
十次=变化/1000;
printf(“$10票据:%i\n”,十);
更改=更改%1000;
五个=变化/500;
printf(“$5钞票:%i\n”,五张);
更改=更改%500;
1=变化/100;
printf(“$1票据:%i\n”,一张);
更改=更改%100;
季度=变动/25;
printf(“季度:%i\n”,季度);
更改=更改%25;
一角硬币=零钱/10;
printf(“一角硬币:%i\n”,一角硬币);
更改=更改%10;
刻痕=变化/5;
printf(“刻痕:%i\n”,刻痕);
更改=更改%5;
便士=零钱/1;
printf(“便士:%i\n”,便士);
返回(0);
}
用float
而不是int
声明所有变量
在
printf
和scanf
中,使用%f
而不是%d
作为格式说明符。声明为int
的变量不能保存十进制值,小数部分被忽略。当您尝试使用scanf()
读取int
的小数时,小数部分仍保留在缓冲区中,并在程序中导致许多问题。要同时存储十进制值,请将其设置为双精度(或浮点)。也就是说,对于double,使用
double cost,
tender,
change,
twenties,
tens,
fives,
ones,
quarters,
dimes,
nickles,
pennies;
另外,在scanf()
和printf()
中,使用%lf
而不是%d
scanf("%lf", &cost);
但是,正如@Weather Vane所指出的,使用fmod()
而不是%
,因为%
不能处理浮点值。这里是如何
change = fmod(change,2000);
这样,将所有%
更改为fmod()
。
要了解有关fmod()
的更多信息,请访问
编辑
只需添加
float
也适用于fmod()
。在printf()
和scanf()
中,将%f
用于float变量声明为int
sInt
只能存储整数,所以如果您输入一个十进制值,它显然不能存储在Int
中。您尝试将浮点数放入Int类型变量中吗?怪不得它工作起来怪怪的。
尝试将输入变量声明为double或float。
另外,将
scanf(“%d”,&cost)
更改为scanf(“%f”,&cost)
以下代码允许用户输入带小数点的数字,并以美分为单位计算整数金额。它并不完美(可以添加更多的错误检查),但它可以处理代码的其余部分
int main( void )
{
int dollars, cents, count, amount;
count = scanf( "%d.%d", &dollars, ¢s );
if ( count == 1 )
amount = dollars * 100;
else if ( count == 2 && cents < 100 )
amount = dollars * 100 + cents;
else
amount = 0;
printf( "%d\n", amount );
}
int main(无效)
{
整数美元、美分、计数、金额;
计数=扫描频率(“%d.%d”,“美元和美分”);
如果(计数=1)
金额=美元*100;
否则如果(计数==2&¢s<100)
金额=美元*100+美分;
其他的
金额=0;
printf(“%d\n”,金额);
}
使用float
是个坏主意,因为会出现舍入错误。正如本例所示,您经常会少给客户一分钱。解决这个问题的方法有很多,但用整数计算更简单、更精确
#include <stdio.h>
#include <math.h>
#define DENOMINATIONS 8
char *names[DENOMINATIONS] = {"twenties","tens","fives","ones",
"quarters","dimes","nickels","pennies"};
float values[DENOMINATIONS]= {20.0f, 10.0f, 5.0f, 1.0f,
0.25f, 0.10f, 0.05f, 0.01f };
int main(int argc, char** args) {
int k;
float change = 1.01f, number;
printf ("Make %.2f change:\n", change);
for (k=0; k<DENOMINATIONS; k++) {
number = change / values[k];
printf ("%-10s %10f %5d\n", names[k], number, (int)number);
change = fmodf (change, values[k]);
}
return 0;
}
阅读有关各种数字格式的输入和存储的文档您输入的成本为5.25,并将其作为%d
扫描为int
,成本
。过去的所有内容(包括小数点)都不会被读取,因为它不是有效的int
的一部分。此外,当您请求读取提交的
时,由于前导的
仍然卡在输入缓冲区中,因此读取完全失败。因此,代码逻辑的其余部分使用了不确定的伪成本
和投标
。如果您检查输入成功/失败状态,所有这些都可以检测到。假设是一切之母…您必须使用带%f的浮点表示小数。请在每个printf
格式字符串的末尾添加\n
。然后,使用所有警告和调试信息进行编译(gcc-Wall-Wextra-g
)。并使用调试器(gdb
)@user1627167 float不能与%No一起工作,因为mod操作符%
不能在float上工作。使用fmod()
Yikes。。。。我没注意到那部分。谢谢你通知我@Weather Vane。但是我可以请你帮忙吗?请帮助我,因为我不知道如何使用fmod()
@WeatherVane,这正是我遇到的问题!%不适用于浮动。我也尝试过只浮动成本和投标,但随后变化作为一个整体显示出来。(即:4美元,但它仍然会注明1:4,25:3)我会试试fmod()谢谢@Arun这花了我几秒钟的时间才找到:你会看到有一个double
和一个float
版本
Make 1.01 change:
twenties 0.050500 0
tens 0.101000 0
fives 0.202000 0
ones 1.010000 1
quarters 0.040000 0
dimes 0.100000 0
nickels 0.200000 0
pennies 0.999999 0