c++ - 余数除法有问题,不允许被零除(c++)
问题描述
嗨,我对 c++ 和堆栈溢出比较陌生。如果在提出问题时有任何特定的协议,请非常诚实,这样我在问其他问题时就不会犯同样的错误。
我正在尝试创建一个程序,该程序采用下图所示的输入。我想让它使用户不能被零除。我还希望在计算后得到十进制输出,但程序会向下舍入。例如,如果我输入股票价格为 50 1/2 并且有 10 个,那么它显示的是 500 而不是 505。
提前致谢!
#include <stdio.h>
#define addr(var) & var // programmer defined macro definition
#define MAXINT 2^32-1
int main(void)
{
char Ticker[6+1]; //Declare Ticker as String
int numOfShares;
float whole,num,dem;
float pricePerShare;
float stockValue;
int i=0;
bool inputOK = false;
int value;
for (i=1; i <= 10; i++)
{
printf("Enter the stock Ticker ==> ");
scanf("%s",&Ticker[0]); //Accept Ticker
printf("How many shares of %s were purchased: ",Ticker);
scanf("%d",&numOfShares);
printf("What is the price per share: ");
scanf("%d %d/%d",addr(whole), addr(num), addr(dem));
pricePerShare = whole + num / dem;
stockValue = numOfShares * pricePerShare;
printf(" Ticker Number of Price Stock\n");
printf(" Symbol Share Per Share Value\n");
printf(" ===== ========== ========= ======\n");
printf("%6s %4d %7.2f %8.2f\n",
Ticker, numOfShares,pricePerShare,stockValue);
// %7.2f --> 9999.99
}
printf(" Press any key to continue ...");
fflush(stdin);
getchar();
return 0;
}
解决方案
在尝试您的代码时,我遇到了与您不同的问题。似乎它总是会截断整数部分而不是小数部分。
无论哪种方式,我都可以通过更改来修复它
scanf("%d %d/%d", ....
至
scanf("%f %f/%f", ....
但是,不确定这是否适合您。
编辑:
刚刚确认这似乎是问题(或至少在我的设备上)。
当whole
num
anddem
被声明为float
,并且您将它们扫描为int
or%d
时,它实际上将整数转换为其他数字(不确定这些数字是什么),这一定是导致问题的原因。
如果您想保留scanf("%d %d/%d ....
您可以int
在开头声明这些值,并在进行计算时将num
其dem
转换为float
:
pricePerShare = whole + float(num) / dem;
推荐阅读
- html - 为什么我得到一个黑页?
- pytorch-lightning - 如何使用 TFT 模型正确修复 pytorch 预测中的随机种子?
- angular - 如何将 ag-grid-community 从版本 20.1.0 更新到 24.1.0?
- python-3.x - 如何在 python 中使用子进程将值放入 cmd 命令的响应中
- android - 碳足迹计算方法
- python - 将数据从 Kivy Python 更新到 Excel
- python - 如何使用 Python 比较两个图像以判断它们是否相似?
- django - Django Rest 框架和通道,您不能从异步上下文中调用它
- python - 处理看不见的标签
- abaqus - 要求isight等待输出文件是什么意思?