积极答复者
请问这段程序怎么得不到正确结果?

问题
-
/ apple.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
double a,b,c,d;
printf("请输入购买苹果数量:");
scanf_s("%f",&a);
if (a>10)
b=a*0.8;
else
if(a>8)
b=a*1.0;
else
if(a>6)
b=a*1.2;
else
if(a>4)
b=a*1.5;
else
b=a*1.8;
printf("应付金额%.2f\n",b);
printf("请输入顾客数\n");
scanf_s("%.2f",&c);
d=b-c;
printf("找零:\n",d);
return 0;
}
请问那里错啦 为什么得不到正确结果?
答案
-
韩光羽你好!
double a,b,c,d; printf("请输入购买苹果数量:"); //scanf_s("%f",&a);//输入double类型数据应该用%lf,%f用于输入float类型数据 scanf_s("%lf",&a); if (a>10) b=a*0.8; else if(a>8) b=a*1.0; else if(a>6) b=a*1.2; else if(a>4) b=a*1.5; else b=a*1.8; printf("应付金额%.2f\n",b);//double类型输出可以用%f,但最好使用%lf指出输出双精度数据 printf("请输入顾客数\n"); //scanf_s("%.2f",&c);//输入时不能用.2限制输入精度,只能在输出时使用以控制输出精度 scanf_s("%lf",&c); printf("%.2f",c); d=b-c; //printf("找零:\n",d);//???输出数据必须指出输出占位符 printf("找零:%f\n",d);
祝好!
shutear
shutear
- 已建议为答案 Elegentin XieModerator 2012年11月14日 10:57
- 已标记为答案 Damon ZhengModerator 2012年11月20日 8:50
-
"stdafx.h"里面已经包含了"stdio.h",所以不用再包含一次了。
苹果的个数和顾客数可以定义成int型。不同数据类型混合运算的时候,编译器会自动转换,并且按数据长度增加的方向进行,以保证精度不降低。
P.S.这段代码好像逻辑有问题,找零不应该是应付金额减去顾客数吧。。。
Damon Zheng [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 Damon ZhengModerator 2012年11月20日 8:54
全部回复
-
请问如何正确使用Visual Studio 2012的预编译头写C控制台程序?
微软把预编译头给好了的?用不用包含stdio.h这个文件啊?但是我写了程序为什么没有正确结果?我没有写这个文件。
- 已合并 Elegentin XieModerator 2012年11月14日 10:56
-
请问一下您的程序是怎么写的的?
Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
- 已编辑 VisualElevenModerator 2012年11月8日 1:36
-
// apple.cpp : 定义控制台应用程序的入口点。
//
#include "stdio.h"
#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[])
{
double a,b,c,d;
printf("请输入购买苹果数量:");
scanf_s("%2f",&a);
if (a>10)
b=a*0.8;
else
if(a>8)
b=a*1.0;
else
if(a>6)
b=a*1.20;
else
if(a>4)
b=a*1.50;
else
b=a*1.80;
printf("应付金额%.2f\n",b);
printf("请输入顾客数\n");
scanf_s("%.2f",&c);
d=b-c;
printf("找零:%d\n",d);
getchar();
return 0;
}用VS2012调试了一下得不到真确结果,怎么回事?
-
韩光羽你好!
double a,b,c,d; printf("请输入购买苹果数量:"); //scanf_s("%f",&a);//输入double类型数据应该用%lf,%f用于输入float类型数据 scanf_s("%lf",&a); if (a>10) b=a*0.8; else if(a>8) b=a*1.0; else if(a>6) b=a*1.2; else if(a>4) b=a*1.5; else b=a*1.8; printf("应付金额%.2f\n",b);//double类型输出可以用%f,但最好使用%lf指出输出双精度数据 printf("请输入顾客数\n"); //scanf_s("%.2f",&c);//输入时不能用.2限制输入精度,只能在输出时使用以控制输出精度 scanf_s("%lf",&c); printf("%.2f",c); d=b-c; //printf("找零:\n",d);//???输出数据必须指出输出占位符 printf("找零:%f\n",d);
祝好!
shutear
shutear
- 已建议为答案 Elegentin XieModerator 2012年11月14日 10:57
- 已标记为答案 Damon ZhengModerator 2012年11月20日 8:50
-
你好,
欢迎来到这里。
由于您这里问了相同的问题:
http://social.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/9d30caa2-7db5-440a-a640-f3b46f6bdf14
这里我会把您的帖子合并到一起。
感谢您的理解与支持。
此致
Elegentin Xie [MSFT]
MSDN Community Support | Feedback to us
- 已编辑 Elegentin XieModerator 2012年11月14日 10:54
-
"stdafx.h"里面已经包含了"stdio.h",所以不用再包含一次了。
苹果的个数和顾客数可以定义成int型。不同数据类型混合运算的时候,编译器会自动转换,并且按数据长度增加的方向进行,以保证精度不降低。
P.S.这段代码好像逻辑有问题,找零不应该是应付金额减去顾客数吧。。。
Damon Zheng [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 Damon ZhengModerator 2012年11月20日 8:54