none
请问这段程序怎么得不到正确结果? RRS feed

  • 问题

  • / 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;
    }


    请问那里错啦 为什么得不到正确结果?
    2012年11月7日 5:50

答案

  • 韩光羽你好!

    	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

    2012年11月12日 2:45
  • "stdafx.h"里面已经包含了"stdio.h",所以不用再包含一次了。

    苹果的个数和顾客数可以定义成int型。不同数据类型混合运算的时候,编译器会自动转换,并且按数据长度增加的方向进行,以保证精度不降低。

    P.S.这段代码好像逻辑有问题,找零不应该是应付金额减去顾客数吧。。。


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月15日 5:23
    版主

全部回复

  • 请问如何正确使用Visual Studio 2012的预编译头写C控制台程序?

    微软把预编译头给好了的?用不用包含stdio.h这个文件啊?但是我写了程序为什么没有正确结果?我没有写这个文件。

    2012年11月7日 6:06
  • 您上面代码中购买苹果数量和顾客数应该是int类型吧


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年11月7日 8:41
    版主
  • 请问一下您的程序是怎么写的的?


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.


    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调试了一下得不到真确结果,怎么回事?

    2012年11月9日 10:32
  • 不好使的
    2012年11月9日 10:35
  • 韩光羽你好!

    	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

    2012年11月12日 2:45
  • 你好,
     
    欢迎来到这里。
     
    由于您这里问了相同的问题:
     
    http://social.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/9d30caa2-7db5-440a-a640-f3b46f6bdf14
     
    这里我会把您的帖子合并到一起。
     
    感谢您的理解与支持。
     
    此致


    Elegentin Xie [MSFT]
    MSDN Community Support | Feedback to us




    2012年11月14日 10:49
    版主
  • "stdafx.h"里面已经包含了"stdio.h",所以不用再包含一次了。

    苹果的个数和顾客数可以定义成int型。不同数据类型混合运算的时候,编译器会自动转换,并且按数据长度增加的方向进行,以保证精度不降低。

    P.S.这段代码好像逻辑有问题,找零不应该是应付金额减去顾客数吧。。。


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月15日 5:23
    版主