请解决/回答函数变量的 C++ 程序问题

Posted

技术标签:

【中文标题】请解决/回答函数变量的 C++ 程序问题【英文标题】:Please Solve/Answer C++ Program problems with Functions Variables 【发布时间】:2011-03-19 07:42:36 【问题描述】:

请解决/回答问题以使程序正常工作。我没有完全理解通过引用或值传递的变量,我认为这就是让这变得如此困难的原因。所以如果你能修复程序。在过去的两天里,我一直在这。我已经包含了我的完整代码。

paxdiablo 建议这样做,我正在尝试按照他们所说的去做

“你应该做的一件事是在你的主函数中将 totalsqrtfeet 初始化为零。那是因为你只是将每个房间的大小添加到它,它以一个随机值开始:垃圾 + a + b + c + d 仍然是垃圾:-)

最重要的是,您从主函数调用 getUserData,然后再次从 doEstimate 调用。然后在 showReport 中再次调用它们。这就是为什么它要问四次。只需调用一次 getUserData。既然是作业,我会让你弄清楚在哪里,但这里有一个提示。如果您在 main (nudge, nudge, wink, wink) 中执行此操作,您还必须将变量传递给 doEstimate,而不是在该函数中创建同名的新变量,并神奇地期望编译器将它们与原件。 "

当我输入 1 个房间,110 平方英尺,15.00 的测试数据时。我在报告功能中获得了正确的房间编号,但其他所有房间都为 0

 #include <iostream>
#include <cstdlib>
#include <cmath>
#include <iomanip>

using namespace std;

// Function prototypes
void showMenu();
void getUserData(int &, int &, double &);
void doEstimate(int &, int &, double &, int &, double &, int &, double &, double &);
void showReport(int &, int &, double &, int &, double &, int &, double &, double &);

int main()

    int choice = 0;
    int calcGallonsOfPaint = 0, rooms = 0, totalsqrtfeet = 0;
    double calcCostOfPaint = 0, costOfPaint = 0;
    int calcHoursOfLabor = 0;
    double calcLaborCost = 0;
    double calcPaintJobCost = 0;

   // Set up numeric output formatting.
   cout << fixed << showpoint << setprecision(2);

   do
   
      // Display the menu and get the user's choice.
      showMenu();
      cin >> choice;

      // Validate the menu selection.
      while (choice < 1 || choice > 2)
      
         cout << "Please enter 1 or 2: ";
         cin >> choice;
      

      if (choice == 1)
      

        //User enters information
        getUserData(rooms, totalsqrtfeet, costOfPaint);

        //Information from getUserData is used to make calculations
        doEstimate(rooms, totalsqrtfeet, costOfPaint, calcGallonsOfPaint, calcCostOfPaint, calcHoursOfLabor, calcLaborCost, calcPaintJobCost);

        //Report is generated from user input and calculations
        showReport(rooms, totalsqrtfeet, costOfPaint, calcGallonsOfPaint, calcCostOfPaint, calcHoursOfLabor, calcLaborCost, calcPaintJobCost);

       
    while (choice != 2);
   return 0;


//*****************************************************************
// Definition of function showMenu which displays the menu.       *
//*****************************************************************

void showMenu()

   cout << "\n\t\tPaint Job Estimator Menu\n\n";
   cout << "1. Get Paint Job Estimate\n";
   cout << "2. Quit the Program\n\n";
   cout << "Enter your choice: ";


/*
After the paint job estimate is displayed, the menu should be displayed again. 
The number of rooms must be at least 1, the price of the paint per gallon must be at least $15.00, 
and the area for the wall space of each room must be greater than 10 square feet. 
All input validation must be performed with a loop.
*/

void getUserData(int &rooms, int &totalsqrtfeet, double &costOfPaint)

    int sqrtfeet;
    int count = 0;

    cout << "Please enter the number of rooms to be painted: ";
    cin >> rooms;

    cout << "Please enter square feet of wall space in room 1: ";
    cin >> sqrtfeet;

    for (count = 2; count <= rooms; count++)
           
            cout << "Please eneter square feet of wall space in room " << count << ": ";
            cin >> sqrtfeet;
            totalsqrtfeet += sqrtfeet;
           

    cout << "What is the cost of the paint: ";
    cin >> costOfPaint;


void doEstimate(int &rooms, int &totalsqrtfeet, double &costOfPaint, int &calcGallonsOfPaint, double &calcCostOfPaint, int &calcHoursOfLabor, double &calcLaborCost, double &calcPaintJobCost)



    calcGallonsOfPaint = 1 * (totalsqrtfeet/110);           //Calculates the number of whole gallons of paint required.

    calcCostOfPaint = calcGallonsOfPaint  * costOfPaint;    //Calculates the cost of the paint required.

    calcHoursOfLabor = calcGallonsOfPaint * 6;              //Calculates the number of whole hours of labor required.

    calcLaborCost = calcHoursOfLabor * 15.00;               //Calculates the labor charges.

    //Calculates the cost of the paint job. This is the sum of the labor charges and the cost of the paint required.
    calcPaintJobCost = calcLaborCost + calcCostOfPaint;     




void showReport(int &rooms, int &totalsqrtfeet, double &costOfPaint, int &calcGallonsOfPaint, double &calcCostOfPaint, int &calcHoursOfLabor, double &calcLaborCost, double &calcPaintJobCost)



    cout << "The number of rooms to be painted: " << rooms << endl;
    cout << "The number of whole gallons of paint required: " << calcGallonsOfPaint << endl;
    cout << "The hours of labor required: " << calcHoursOfLabor << endl;
    cout << "The cost of the paint: " << calcCostOfPaint << endl;
    cout << "The labor charges: " << calcLaborCost << endl;
    cout << "The total cost of the paint job: " << calcPaintJobCost << endl;

    system("pause");
    system("cls");

【问题讨论】:

在哪里?您能只显示您遇到问题的几行吗? 您能给我们提供实际结果与预期结果吗?此外,您没有将任何内容传递给您的函数: if (choice == 1) getUserData();做估计();显示报告(); getUserData 和 doEstimate 都需要几个参数,而你没有提供任何参数。 试着清楚地解释你想要做什么,你已经尝试过什么,什么没有按照你认为的方式工作。此外,尽量减少代码以省略不必要的部分。只需使用代码来说明您的问题。 我已经修复了代码并减少了一些。我现在遇到的问题是它没有从 getUserData 到在下一个函数中进行计算以最终显示结果 我觉得这个网站上的“programming”标签有点多余。 【参考方案1】:

这是错误的

if (choice == 1)

    getUserData();
    doEstimate();
    showReport();

你的原型是

void getUserData(int &rooms, double &costOfPaint, int &totalsqrtfeet);
void doEstimate(int &calcGallonsOfPaint, double &calcCostOfPaint, int &calcHoursOfLabor, double &calcLaborCost, double &calcPaintJobCost);
void showReport();

你需要

int rooms;
double costOfPaint;
int totalsqrtfeet;

getUserData(rooms, costOfPaint, totalsqrtfeet);

【讨论】:

我试过这个。我不会使用全局变量。所以我必须通过引用或类似的方式传递变量 这些不是全局变量。它们通过引用传递。问题是这段代码太难学了。从小开始——一个 main() 和一个其他函数。从 main 调用函数。 我更改了代码。我把它贴在上面。我改变了原型和你的建议。它正在工作,但重复 getUserData 函数会很糟糕。我需要它从 getUserData 获取信息并将变量放入 doEstimate 并运行计算。以 showReport 结束所有变量并显示它们。 在最终显示结果之前,它会向 getUserData 询问 4 次 for 输入【参考方案2】:

你的问题在这里:

getUserData();
doEstimate();
showReport();

这些函数都带有参数。你没有给他们任何东西。解决方案是为他们提供所需的论据。

他们似乎采用了用作外参数的参考参数。你可以这样称呼他们:

void foo(int& out_param) 

   out_param = 1;


int main() 

   int x = 0;      // Create a variable of the appropriate type to pass 
   foo(x);         // Give it as a parameter to foo
   std::cout << x; // x is now 1, so this should print 1

   return 0;

我不会为您的特定问题提供直接解决方案,因为这显然是家庭作业,但这应该会让您走上正轨。

【讨论】:

在最终显示结果之前,它会向 getUserData 询问 4 次 for 输入 请帮忙。我终于让它开始工作,但它不断重复 getUserData 4 次,然后显示带有负数的结果。我使用房间数量 1,然后对于每个房间的平方英尺,我输入 110,对于油漆成本,我输入 15.00。当结果带有负数时,它会一遍又一遍地询问同样的事情,但它会在结果中显示正确的房间数【参考方案3】:

不确定这是否与您的问题有关(您并没有真正解释那是什么),但在函数 doEstimate 中您有:

getUserData (double &costOfPaint, int &totalsqrtfeet);

我不确定您在这里要做什么,但正如所写的那样,它是一个函数原型声明,没有任何用处。大概你有别的打算吧?如果你想调用这个函数,你应该这样做,其中var1var2var3 是一些必须在调用之前声明的变量:

getUserData(var1, var2, var3);

稍后你有:

calcGallonsOfPaint: 1 * (totalsqrtfeet/110);

这应该是 = 而不是 :

【讨论】:

在最终显示结果之前,它会向 getUserData 询问 4 次 for 输入【参考方案4】:

我建议使用(源代码级)调试器单步执行您的程序,以查看每行代码发生的情况。它是一个不可或缺的工具,可以极大地轻松跟踪程序中的意外行为,并为您节省大量时间。

只需在 Google 上搜索您正在使用的编程环境/IDE 的调试器教程。但一般来说,在使用任何调试器时,您都希望在代码中设置断点,然后单步执行每一行并查看程序的当前状态、检查变量等。

【讨论】:

【参考方案5】:

一个班级最多有 30 名学生。每个学生都由姓氏、姓名和平均数来确定。它要求学生展示:

    按环境降序排列; 按字母顺序排列。

【讨论】:

以上是关于请解决/回答函数变量的 C++ 程序问题的主要内容,如果未能解决你的问题,请参考以下文章

关于C/C++的一些问题,着急找高手求助

急!请高手指教c++如何定义一个参数个数不确定的函数?

C++线程更新变量问题

“你的程序有被限制的函数,请检查你的代码。或你所在位置有无良访问。”怎么解决(C++程序)

C++ - 在内部,当定义一个类的成员函数时,应该使用成员变量名称还是它的 getter 函数?

C++入门命名空间详解——解决的问题使用方法和C语言对比