鱼C论坛

 找回密码
 立即注册
查看: 4019|回复: 15

请banzh此题为FishC老师的快速入门第六讲实例,为什么运行答案会错误呢?初学者不懂

[复制链接]
发表于 2013-7-21 15:21:17 | 显示全部楼层 |阅读模式
1鱼币
#include <iostream>
void convertTemperature(double tempIn, char typeIn);
void convertTemperature(int tempInint, char typeIn);
int main()
{
        double tempIn;
        int tempInInt;
        char typeIn;std::cout << "请以【xx.x C】或【xx.x F】的形式输入温度: ";
      std::cin >> tempIn >> typeIn;
      std::cin.ignore(100, '\n');
      std::cout << "\n";
        convertTemperature(tempIn, typeIn);

        std::cout << "请以【xx C】或【xx F】的形式输入温度: ";
      std::cin >> tempInInt >> typeIn;
      std::cin.ignore(100, '\n');
      std::cout << "\n";
        convertTemperature(tempInInt, typeIn);

        return 0;
}

void convertTemperature(double tempIn, char typeIn)
{     
      const unsigned short ADD_SUBTRACT = 32;
      const double RATIO = 9.0 / 5.0;

      double tempOut;
      char typeOut;      

      switch( typeIn )
      {
      case 'C':
      case 'c':
            tempOut = (tempIn * RATIO) + ADD_SUBTRACT;
            typeOut = 'F';
            typeIn = 'C';
            break;

      case 'F':
      case 'f':
            tempOut = (tempIn - ADD_SUBTRACT) / RATIO;
            typeOut = 'C';
            typeIn = 'F';
            break;

      default:
            typeOut = 'E';
            break;                  
      }

      if( typeOut != 'E' )
      {
            std::cout << tempIn << typeIn << " = " << tempOut << typeOut << "\n\n";
      }
      else
      {
            std::cout << "请按照给出格式输入!" << "\n\n";
      }

      std::cout << "请输入任意字符结束!" << "\n";
      std::cin.get();
}

void convertTemperature(int tempInint, char typeIn)
{     
      const unsigned short ADD_SUBTRACT = 32;
      const int RATIO =(int)( 9.0 / 5.0);//不强制转换,则不能将double直接赋值给const int

      int tempOut;
      char typeOut;      

      switch( typeIn )
      {
      case 'C':
      case 'c':
            tempOut = (tempInint * RATIO) + ADD_SUBTRACT;
            typeOut = 'F';
            typeIn = 'C';
            break;

      case 'F':
      case 'f':
            tempOut = (tempInint - ADD_SUBTRACT) / RATIO;
            typeOut = 'C';
            typeIn = 'F';
            break;

      default:
            typeOut = 'E';
            break;                  
      }

      if( typeOut != 'E' )
      {
            std::cout << tempInint << typeIn << " = " << tempOut << typeOut << "\n\n";
      }
      else
      {
            std::cout << "请按照给出格式输入!" << "\n\n";
      }

      std::cout << "请输入任意字符结束!" << "\n";
      std::cin.get();
}
QQ图片20130721151330.jpg QQ图片20130721151701.jpg
运行答案有误。


最佳答案

查看完整内容

说的有道理……其实重载就是一个函数名可以做不同的事,就比如求最大值Max()一样,只是把函数的参数类型变了一下而已啦 至于错误嘛,看程序:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-21 15:21:18 | 显示全部楼层
本帖最后由 格式天下 于 2013-7-22 15:49 编辑

说的有道理……其实重载就是一个函数名可以做不同的事,就比如求最大值Max()一样,只是把函数的参数类型变了一下而已啦
至于错误嘛,看程序:
  1. #include <iostream>
  2. void convertTemperature(double tempIn, char typeIn);
  3. void convertTemperature(int tempInint, char typeIn);
  4. int main()
  5. {
  6.         double tempIn;
  7.         int tempInInt;
  8.         char typeIn;
  9.         std::cout << "请以【xx.x C】或【xx.x F】的形式输入温度: ";
  10.       std::cin >> tempIn >> typeIn;
  11.       std::cin.ignore(100, '\n');
  12.       std::cout << "\n";
  13.         convertTemperature(tempIn, typeIn);

  14.         std::cout << "请以【xx C】或【xx F】的形式输入温度: ";
  15.       std::cin >> tempInInt >> typeIn;//你的错误就是出在了这里
  16.                                                          //,当你输入一个c 的时候,tempInInt由于是int  型,没有被赋值
  17.                                                    //而typeIn 被赋值为c,这也正是后面函数没有报错(输入格式错误)的原因了
  18.       std::cin.ignore(100, '\n');
  19.       std::cout << "\n";
  20.         convertTemperature(tempInInt, typeIn);

  21.         return 0;
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-21 15:24:06 | 显示全部楼层
{:1_1:}恳求得到回复,因为重载感觉就是取一个相同的名字的函数让其具有多种表现形式而已,根本没有什么优化的地方,甚至连代码量都没有少。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-21 15:33:55 | 显示全部楼层
你可以找下版主问下哈!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-21 15:35:40 | 显示全部楼层
再次路过!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-21 15:38:15 | 显示全部楼层
{:1_1:}谢谢我到群里面问问
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-21 15:39:39 | 显示全部楼层
{:1_1:}我怎么联系版主啊?没有玩过什么论坛
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-21 22:36:27 | 显示全部楼层
没错啊,最后一个是你输入错误了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-22 15:36:43 | 显示全部楼层
额,第一个输入2,输出来的应该是整形数据啊,最后一个不可以那样输入吗?{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-22 16:14:02 | 显示全部楼层
C:\Documents and Settings\Administrator\桌面
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-22 16:18:14 | 显示全部楼层
格式天下 发表于 2013-7-22 15:47
说的有道理……其实重载就是一个函数名可以做不同的事,就比如求最大值Max()一样,只是把函数的参数类型变 ...

我刚试了,我好好去单步下程序,本来输入2应该是输出整数的,按小鱼老师的说法,第二次输入我改成和上面第一次的输入一样:5 C,结果还是不对。按你的分析应该是缓存中存有:5 C,先判断5赋值给tempInInt,遇到空格结束,将C赋值给typeIn,应该是这样的吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-22 16:18:52 | 显示全部楼层
网宣祥 发表于 2013-7-22 16:18
我刚试了,我好好去单步下程序,本来输入2应该是输出整数的,按小鱼老师的说法,第二次输入我改成和上面第 ...

C:\Documents and Settings\Administrator\桌面
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-22 16:44:21 | 显示全部楼层

谢谢,刚我单步了,最后是有输入错误,但是我又有新的问题了,为什么编译器不据我输入的数据类型自动选择重载函数执行呢,还是顺序执行。如开始输入:2 C,那么输出的还是双精度型的数据。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-22 17:07:52 | 显示全部楼层
565123 发表于 2013-7-21 22:36
没错啊,最后一个是你输入错误了

谢谢解决了,也弄清楚了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-22 17:48:59 | 显示全部楼层
本帖最后由 格式天下 于 2013-7-22 17:51 编辑
网宣祥 发表于 2013-7-22 16:44
谢谢,刚我单步了,最后是有输入错误,但是我又有新的问题了,为什么编译器不据我输入的数据类型自动选择 ...
  1. int main()
  2. {
  3.         double tempIn;
  4.         int tempInInt;
  5.         char typeIn;std::cout << "请以【xx.x C】或【xx.x F】的形式输入温度: ";
  6.       std::cin >> tempIn >> typeIn;//你输入的虽然2 c看似是int型,但是你忽略了tempIn 其实是double型的,
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-22 21:37:12 | 显示全部楼层

嗯嗯,谢谢。要是重载能根据自己在控制台的输入程序选择性调用就好了(不用条件控制)。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-18 20:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表