0

我的任务是编写一个程序来根据用户输入的数据显示一个星域 (*)。我得到了代码,但我的导师要求将它们放在至少两个函数中。显示横幅功能不起作用。getData 运行并要求用户输入值,但随后程序在输入后停止。似乎出了什么问题?

#include <iostream>

using namespace std;

void displaybanner(int numrows=0, int numcolums=0, int numfields=0);

void getData(int numrows=0, int numcolumns=0, int numfields=0);

const char c = '*';



int main(void)
{
    getData();
    displaybanner();


}

void getData(int numrows,int numcolumns,int numfields)
{

    cout << "Welcome to the banner creation program!" << endl;

    cout << "Enter the number of rows (1 - 5) --> ";
    cin >> numrows;

    if(numrows<1 || numrows>5){
        cout << "Your entered value is outside the range!" << endl;
        cout << "Program will now halt..." << endl;
        exit(0);}


    cout << "Enter the number of columns (5 - 50) --> ";
    cin >> numcolumns;

    if(numcolumns<5 || numcolumns>50){
        cout << "Your entered value is outside the range!" << endl;
        cout << "Program will now halt..." << endl;
        exit(0);
    }

    cout << "Enter the number of rows (3 - 10) --> ";
    cin >> numfields;

    if(numfields<3 || numrows>10){
        cout << "Your entered value is outside the range!" << endl;
        cout << "Program will now halt..." << endl;
        exit(0);
    }

}

void displaybanner(int numfields, int numrows, int numcolumns)
{
for (int i = 0; i < numfields; i++) {
  for (int j = 0; j < numrows; j++) {
    for (int k = 0; k < numcolumns; k++) {
      cout << c;
    }
    cout << endl;
  }
  cout << endl << endl << endl;
}
}
4

2 回答 2

2

这不起作用,因为您只是在修改函数中的临时/本地值。要解决此问题,您必须通过引用传递参数(使用指针或引用)。

最简单的方法可能是使用引用,例如更改

void getData(int numfields, int numrows, int numcolumns)

void getData(int &numfields, int &numrows, int &numcolumns)

这将确保保留您对这些参数所做的所有更改,即使在返回调用函数时也是如此。请注意,您不能使用默认参数,但您只需在要通过参数返回值的地方进行。

您的主要功能应如下所示:

int main(void)
{
    int fields, rows, cols;
    getData(fields, rows, cols);
    displaybanner(fields, rows, cols);
}
于 2012-11-09T17:16:18.970 回答
0

的默认参数displaybanner全为零:

void displaybanner(int numrows = 0, int numcolums = 0, int numfields = 0);

而且由于您在没有任何参数的主模块中调用此函数,因此不会执行连续的循环(因为索引变量为 0 并且它们的限制为 0)。要使其工作,请将参数传递给displaybanner或使其默认参数大于 0。

于 2012-11-09T17:18:52.773 回答