#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
答案 0 :(得分:0)
五大问题:
cin
的运营商>>
不是<<
,您不能在那里使用逗号。
cin << pounds, ounces; // !
应该是
cin >> pounds >> ounces;
你忘了参数类型
void convertWeight(ounces, grams, pounds, kilograms) // !
应该是
void convertWeight(double ounces, double grams, int pounds, int kilograms)
您正在使用尚未声明的变量answer
。
cin >> answer; // !
使用<<
时错过了cout
cout << ... << " grams." endl; // !
^
您不能以这种方式返回两个值
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 ++中也是不允许的。
不是输出一对值(这是可能的,但以与您在此处尝试的方式不同的方式),而是传递grams
和kilograms
会更容易变量通过引用 - 这意味着您调用的函数将更改传递给它们的变量。您需要将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);
并且您的函数会为您填写kilograms
和grams
的值。
答案 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)