磅和盎司到千克和克。驱动程序失败

时间:2013-11-14 09:48:38

标签: c++

#include<iostream>

using namespace std;

void convertWeight(double ounces, double grams, int pounds, int kilograms);
double output(double ounces, int pounds);

int main()
{
    double ounces, grams;
    int pounds, kilograms;
    char answer;

    do
    {
    cout << "Enter weight in pounds and ounces: " << endl;
    cin >> pounds >> ounces;
    cout << output(pounds, ounces) << endl;

    cout << "Do you want to test again (y/n)?: " << endl;
    cin >> answer;

    }while (answer == 'y' || answer == 'Y');

    return 0;
}

double output(double ounces, int pounds)
{
    double grams;
    int kilograms;

    convertWeight(ounces, grams, pounds, kilograms);

    cout << pounds << "pounds and " << ounces << "ounces = " << kilograms << "kilograms and " << grams << " grams." << endl;


    return 0;

}

void convertWeight(int pounds, double ounces, int &kilograms, double &grams)
{
    double temp = (pounds + ounces/16)/2.2046
    kilograms = temp;
    grams = (temp - kilograms) * 1000;
}

好吧我正在尝试编写一个将磅和盎司转换成千克和克的程序。我必须将磅和千克作为int类型,盎司和克作为double类型。我觉得我在这里没有做过什么。我试图使用驱动程序并通过call-by-value和call-by reference参数调用函数。我刚编译了我的程序,得到了我见过的最长的错误列表,并且还有我以前从未见过的错误。我没有添加到我应该拥有的程序中的是什么?

这是我的以下错误列表:

warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data
warning C4101: 'kilograms' : unreferenced local variable
warning C4101: 'grams' : unreferenced local variable
error C2146: syntax error : missing ';' before identifier 'kilograms'
warning C4244: '=' : conversion from 'double' to 'int', possible loss of data

4 个答案:

答案 0 :(得分:0)

五大问题:

1

cin的运营商>>不是<<,您不能在那里使用逗号。

cin << pounds, ounces; // !

应该是

cin >> pounds >> ounces;

2

你忘了参数类型

void convertWeight(ounces, grams, pounds, kilograms) // !

应该是

void convertWeight(double ounces, double grams, int pounds, int kilograms)

3

您正在使用尚未声明的变量answer

cin >> answer; // !

4

使用<<时错过了cout

cout <<  ... << " grams."   endl; // !
                          ^

5

您不能以这种方式返回两个值

return(kilograms, grams); // !

删除它,因为返回值为void,您忘记将参数设为引用

void convertWeight(double ounces, double &grams, int pounds, int &kilograms)
                                         ^                       ^

最后

This是您代码的有效版本。

答案 1 :(得分:0)

你需要在函数实现中附加参数类型:void convertWeight(盎司,克,磅,公斤)

答案 2 :(得分:0)

我无法阅读那里的所有错误消息,但我可以告诉你至少部分程序有什么问题: - )

void convertWeight(ounces, grams, pounds, kilograms)
{ 
    kilograms = (pounds + ounces/16)/2.2046;
    grams = kilograms * 1000;

    return(kilograms, grams);
}

在这里,你已经说过函数返回类型是void,即它没有返回值 - 但是你还是试图返回一个值! (以一种无效的C ++方式。)此外,您忘记在函数定义中指定参数类型,这在C ++中也是不允许的。

不是输出一对值(这是可能的,但以与您在此处尝试的方式不同的方式),而是传递gramskilograms会更容易变量通过引用 - 这意味着您调用的函数将更改传递给它们的变量。您需要将convertWeight功能签名更改为

// Note the '&' on the reference variables
void convertWeight(int pounds, double ounces, int& kilograms, double& grams)
{
    kilograms = // whatever
    grams = // whatever
} 

现在你可以这样打电话给convertWeight()

int pounds = 3;
int ounces = 12;
int kilograms;
double grams;

convertWeight(pounds, ounces, kilograms, grams);

并且您的函数会为您填写kilogramsgrams的值。

答案 3 :(得分:0)

代码中有很多东西。让我专注于convertWeight功能。

首先,在参数名称前写下参数的类型,就像使用output函数一样。

其次,函数参数都是“in”参数,这意味着它们用于传递复制的值以在函数中使用。允许函数本身修改它们,但是从函数返回时,修改在本地完成并丢弃。您希望返回两个在C ++中不可能的值,除非您将它们包装到像std::pair这样的单个容器类型中。如果您不想这样做,则需要将两个参数设置为“out”参数,这可以使用参考在C ++中完成。

最后,转换是错误的。您对转换千克的分配存储在int中,这意味着小数部分截断。当之后乘以1000时,你会得到一个可被1000整除的数字,但这并没有多大帮助;即使它仍然是一个双倍,你的克变量不仅会有克而是全重。我几乎可以肯定你只想用克表示千克的“余数”。因此,使用临时双变量来修复第一个问题,并在乘以1000之前减去公斤,以解决第二个问题。

void convertWeight(double ounces, double &grams, int pounds, int &kilograms)
{
    double temp = (pounds + ounces/16)/2.2046;
    kilograms = temp;                  // will automatically truncate to full kilograms
    grams = (temp - kilograms) * 1000; // Will use the remainder
}

此外,我不喜欢参数顺序,但这是个人偏好选择。通常,您希望分离出来。将“较大”单元放在“较小”单元之前更有意义,从而产生这种签名:

void convertWeight(int pounds, double ounces, int &kilograms, double &grams)