在C++中返回错误值的函数
Function returning wrong value in C++
我正在尝试调用一个函数来返回输入数字的总和,但它只返回0。
for 循环在 main 中应用时会正确计算总和,而无需调用函数。但是,当我调用该函数时,它会返回一个错误的值。
#include <iostream>
using namespace std;
int EvenOrOdd(int Number, int Value)
{
if (Number % 2 == 0)
Value = 1;
return(Value);
}
int CalculateSum(int Number, int Sum)
{
for (int i = 1; i <= Number; i++)
Sum = Sum + i;
return(Sum)
}
void main()
{
int Number = 0, Value = 0, Sum = 0;
cout << "Please enter a positive integer: ";
cin >> Number;
while (Number >= 1 && Number <= 100)
{
EvenOrOdd(Number, Value);
if (Value == 1)
cout << Number << " is Even";
else
cout << Number << " is Odd";
CalculateSum(Number, Sum);
cout << "n" << Sum << " is the sum of the first " << Number;
cout << "nPlease enter a positive integer: ";
cin >> Number;
}
}
你从不使用return(Value);
。如果要使用新value
而不使用return
,则必须传递引用,例如int EvenOrOdd(int Number, int& Value)
(或通过正常的旧指针)。CalculateSum(Number, Sum);
也是如此
为什么?除非传递引用或指针,否则参数将按值传递,并且函数接收原始变量的副本。当函数返回时,对函数内的副本所做的任何更改都将丢失。(例如,调用方无法看到更改)。
您可以通过以下两种方式之一解决问题。(1) 利用 return 来获取函数返回的值,例如
Value = EvenOrOdd(Number, Value);
或 (2) 传递对值的引用,例如
int EvenOrOdd(int Number, int& Value)
{
if (Number % 2 == 0)
Value = 1;
return(Value);
}
通过传递引用,对函数中的Value
所做的任何更改都会自动返回到调用方中的原始变量,因为引用只是原始变量的别名。这同样适用于您在CalculateSum(Number, Sum);
中使用Sum
使用引用的示例
#include <iostream>
using namespace std;
int EvenOrOdd(int Number, int& Value)
{
if (Number % 2 == 0)
Value = 1;
return(Value);
}
int CalculateSum(int Number, int& Sum)
{
for (int i = 1; i <= Number; i++)
Sum = Sum + i;
return(Sum);
}
int main (void)
{
int Number = 0, Value = 0, Sum = 0;
cout << "Please enter a positive integer: ";
cin >> Number;
while (Number >= 1 && Number <= 100)
{
EvenOrOdd(Number, Value);
if (Value == 1)
cout << Number << " is Even";
else
cout << Number << " is Odd";
CalculateSum(Number, Sum);
cout << "n" << Sum << " is the sum of the first " << Number;
cout << "nPlease enter a positive integer: ";
cin >> Number;
}
}
(注意:我使用了上面main()
的一致性调用 - 见下文)
您还使用了对main()
的不合规调用。符合要求的调用是int main (void)
或int main (int argc, char **argv)
(尽管argc
和argv
可以命名为任何名称。如果您使用的是需要void main()
的不合格嵌入式系统,那么您没问题,否则您需要修复它。
您收到的总和为 0,因为您没有将返回值分配给任何内容。
试试这个:
int sum = CalculateSum(Number, Sum);
因此,现在您将 CalculateSum 的返回值保存到一个变量 sum,您可以使用该值输出给用户。
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- C++:用户定义的显式类型转换函数错误
- C++ 合并字符串以'system'函数错误
- C++ wmain 函数错误时使用 Unicode
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- 线程 std::调用未知类型,无法专门化函数错误
- 表单显示对话框函数错误,并且不执行下面的语句
- 函数错误 C2059:语法错误:'>'不起作用
- STL向量上出现奇怪的复制构造函数错误
- C++ Visual Studio 重载函数错误:没有重载函数的实例与指定的类型匹配
- C++引用已删除函数错误
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- C++ 乘法定义的构造函数错误消息似乎错误
- 在 c++ 代码中将数组传递给函数错误
- FFMPEG avcodec_decode_video2函数错误代码
- 为什么我会收到转换函数错误