首页 > 解决方案 > 余数除法有问题,不允许被零除(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;
    
}

标签: c++

解决方案


在尝试您的代码时,我遇到了与您不同的问题。似乎它总是会截断整数部分而不是小数部分。

无论哪种方式,我都可以通过更改来修复它

scanf("%d %d/%d", ....

scanf("%f %f/%f", ....

但是,不确定这是否适合您。

编辑:

刚刚确认这似乎是问题(或至少在我的设备上)。

whole numanddem被声明为float,并且您将它们扫描为intor%d时,它实际上将整数转换为其他数字(不确定这些数字是什么),这一定是导致问题的原因。

如果您想保留scanf("%d %d/%d ....

您可以int在开头声明这些值,并在进行计算时将numdem转换为float

pricePerShare = whole + float(num) / dem;


推荐阅读