0
#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 类型。我觉得这里有一些我没有做过的事情。我正在尝试使用驱动程序并通过按值调用和按引用参数调用的函数。我刚刚编译了我的程序,得到了我见过的最长的错误列表,并且也有我以前从未见过的错误。什么是我没有添加到我应该拥有的程序中?

这是我的以下错误列表:

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

3 回答 3

0

您需要在函数实现中附加参数类型: void convertWeight(ounces,grams,pounds,kkgs)

于 2013-11-14T09:55:12.100 回答
0

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

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

    return(kilograms, grams);
}

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

与其输出一对值(这是可能的,但与您在这里尝试的方式不同),通过引用grams传递andkilograms变量会更容易——这意味着您调用的函数将更改您传递给他们的变量。您需要将函数签名更改为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

于 2013-11-14T09:56:33.763 回答
0

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

首先,在参数名称前面写下参数的类型output,就像你对函数所做的那样。

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

最后,转换错误。您对转换后的公斤数的赋值存储在一个 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
}

我也不喜欢参数 order,但这是个人偏好。通常,您希望将输入和输出分开。此外,将“较大”单元放在“较小”单元之前更有意义,从而产生以下签名:

void convertWeight(int pounds, double ounces, int &kilograms, double &grams)
于 2013-11-14T10:01:31.530 回答