![](/img/trans.png)
[英]Trouble executing program that uses both pass by reference and pass by value parameter
[英]Hello, the program on Functions (pass by reference/pass by value) and I'm not entirely sure what is wrong with my program
有人可以针对我的程序的问题提供建议或指导吗? 我确实已经完全写完了程序,不确定在哪里将函数定义和函数原型添加到程序中。 该程序涉及按值传递和按引用传递。 此外,任何有关小错误的有用通知都将不胜感激
#include "pch.h"
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
//Declare Variables
double amount = 22.66;
int num;
int dollars;
int quarters;
int dimes;
int nickels;
int pennies;
double x = 22.25;
double y = 55.55;
//Input
cout << "Please enter your dollar amount: ";
cin >> amount;
void showMenu() //function prototype
{
cout << "A. Money Exchange function" << endl;
cout << "B. Find Max Solution" << endl;
cout << "E. Exit" << endl;
cout <<"Please enter your choice:"<<endl;
}
void MoneyExchange(float amount, int& dollars, int& quarters, int& dimes,
int & nickels, int & pennies) // function prototype
{
int amount = 0, Remainder;
amount = amount * 100;
dollars = amount / 100;
Remainder = amount - (dollars * 100);
quarters = Remainder / 25;
Remainder = Remainder - (quarters * 25);
dimes = Remainder / 10;
Remainder = Remainder - (dimes * 10);
nickels = Remainder / 5;
Remainder = Remainder - (nickels * 5);
pennies = Remainder / 1;
}
double max(double x, double y) //function prototype
{
double max;
if (x >= y)
max = x;
else
max = y;
system("Pause");
return 0;
}
要使用一个函数,您需要有一个函数方法声明(该函数存在的告诉编译器/链接器)和实现(函数方法所做的事情)。 这是一个准系统的例子
void doStuff(); //im function declaration/prototype
void doMoreStuff(); //im function declaration/prototype
int main()
{
void doMoreStuff() //dont nest me in here!
{
cout << "doMoreStufff runs" << endl;
}
doStuff();
doMoreStuff();
return 1;
}
void doStuff() //im function implementation
{
cout << "doStuff runs" << endl;
}
关键要点:1)在代码中称为function prototype
的是函数实现2)没有嵌套实现。 例如:不要这样做
int main()
{
void doMoreStuff() //dont nest me in here!
{
cout << "doMoreStufff runs" << endl;
}
doStuff();
doMoreStuff();
return 1;
}
void doStuff() //im function implementation
{
cout << "doStuff runs" << endl;
}
(旁注:可以在其中嵌套匿名/ lambda函数)
3)在您的情况下,将方法实现放在main{}
实现之上还是之下都没关系,只需确保在main{}
实现之上声明了您的函数(使用这些方法的地方)
TLDR不良的命名约定,未正确原型设计/声明和定义,变量类型不匹配,金额隐藏值(MoneyExchange中为22.66,然后是cin,然后是int数量= 0),未使用的代码(max函数),菜单不起作用。
您试图像这样在main函数中定义函数:
int main() {
// ...
void showMenu() {
// code to do stuff
}
// ...
return 0;
}
它不能像这样工作。 如果要定义并声明showMenu,以便可以在main中使用它,请尝试此操作。 (往上看)
void showMenu() {
// code to do stuff
}
int main() {
// ...
showMenu();
// ...
}
如果您没有对该函数进行原型设计,则必须在main函数之上声明它。 否则它将无法编译。 (往上看)
如果您想制作原型,请尝试一下(见下文)。 您可以将原型保存在主文件中,也可以将其包含在主文件中的头文件中。
void showMenu(); // prototype
int main() {
// ...
showMenu();
// ...
}
void showMenu() {
// code to show the menu
}
如果要在另一个函数内部定义函数,则应使用lambda表达式。
您的程序存在问题:
-您将数量定义为值22.66的两倍,然后在输入>> >>时将其覆盖。 您只需要设置一次该值,因此删除cin或(最好)将其更改为
double amount;
-您的函数和过程showMenu,MoneyExchange和max需要移到main之外,并在main之前进行原型设计或定义。
-您应该找到一个适合您的命名约定并遵守它。 您的过程名称以大写的MoneyExchange开头,然后以小写的showMenu开头。 坚持一样,我会使用moneyExchange和showMenu。 您已经对变量做了同样的事情,在这里看看https://code.tutsplus.com/articles/9-confusing-naming-conventions-for-beginners--net-15584这解释了一些命名约定。
-Max函数不返回任何内容。 如您所声明的,它必须返回一个double。 例如
double max(double x, double y) {
// ...
return 0.0;
}
-在MoneyExchange中,您声明一个新的int称为amount,您在main中本地将其声明为double。 您还将值设置为0,而不是使用cin输入的值。
-当您声明MoneyExchange时,金额被视为浮点数。 因此,您传递了一个double值,将其作为浮点数接收,然后创建一个名为count的新int ...坚持一种数据类型。 您也不会通过引用传递它。
-在此代码中的任何地方都不要使用max函数。
-您不会从菜单中获得输入,因此用户没有选择权。 我会使用switch语句。 请参阅此链接http://www.cplusplus.com/forum/general/156582/ 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.