嗨,我对 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 Stockn");
printf(" Symbol Share Per Share Valuen");
printf(" ===== ========== ========= ======n");
printf("%6s %4d %7.2f %8.2fn",
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
和dem
被声明为float
时,并且您正在将它们扫描为int
或%d
,它实际上将整数转换为其他数字(不确定那些是什么(,这一定导致了问题。
如果您想保留scanf("%d %d/%d ....
,还有另一种解决方法
您可以在开头将这些值声明为int
,并在执行计算时将num
或dem
转换为float
:
pricePerShare = whole + float(num) / dem;