1

我正在尝试让一个程序根据用户输入的数字打印出一个星号,例如 10-20 = 1 之间的数字等。我的问题是我不知道如何让打印功能发挥作用目前它没有打印任何东西。任何人都可以帮忙。

代码:

void readExamMarks(int examMarks[], int sizeOfArray, int counter1, int counter2){

cout << "Please enter a set of exam marks to see a histogram for:" << endl;
int x = 0;

for( int idx = 0; idx < sizeOfArray; idx++){
    cin >> x;
     if((x >=0) && (x <= 100)){
            x = x/10;

            switch(x){
            case 1:
                counter1++;

                break;
            case 2:
                counter2++;
                break;

            }

            examMarks[idx] = x;
        }
             else{
             cout << "ERROR: Value must be in range [0...100], please    enter a valid value\n"; 
         }
}
}


void printExamMarks(int examMarks[], int sizeOfArray){

for(int x = 0; x < sizeOfArray; x++){

    cout << setw(5) << examMarks[x];
}
cout << endl;
}

void printHisto(int examMarks[], int sizeOfArray,int counter1, int counter2){
system("cls");

while(counter1 != 0){
    cout << "*" << endl;
    counter1--;
}
for( int x = 0; x < counter1; x++){
cout << setw(5) << "*" << endl;
}
 }

int main() 
{ 
int examMarks[20];
int counter1 = 0;
int counter2 = 0;

readExamMarks(examMarks, 5, counter1, counter2);
printHisto(examMarks, 5, counter1, counter2);
printExamMarks(examMarks,5);


system("PAUSE");
}
4

2 回答 2

3

您的代码有点奇怪,我在遵循它时遇到了一些麻烦。但我认为你犯的错误是你假设因为你增加了变量counter1,然后counter2readExamMarks某种程度上会影响和counter1counter2printHisto。这不是真的。您更改 in 的值,readExamMarks但这对 in 的变量没有影响main,因此当您调用时printHisto counter1,并且counter2仍然为零。

你应该明白的是,不同函数中的变量即使同名也是不同的变量。如果要readExamMarks更改变量,main则应使用引用。

void readExamMarks(int examMarks[], int sizeOfArray, int& counter1, int& counter2)
{
    ...
}

通过使用int&而不是int counter1counter2现在是对变量的引用main,而不是main 中变量的副本

于 2013-04-06T11:26:40.323 回答
0
printHisto(examMarks, 5, counter1, counter2);

不会打印任何内容,原因是 counter1 和 counter2 初始化为 0,它们按原样传递给 printHisto(...),我猜你打算 readExamMarks(...) 来修改你的 counter(1,2) ,如果是这种情况,请通过参考http://www.cplusplus.com/doc/tutorial/functions2/传递它们

于 2013-04-06T11:33:13.810 回答