如何在函数中使用计数器

时间:2013-04-06 11:21:26

标签: c++

我正在尝试根据使用的数字输入一个程序打印出一个星号,例如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");
}

2 个答案:

答案 0 :(得分:3)

您的代码有点奇怪,我在跟踪它时遇到了一些麻烦。但是我认为你所犯的错误就是假设因为你在counter1增加变量counter2readExamMarks然后会以某种方式影响counter1的值和counter2中的printHisto。这不是真的。您更改了readExamMarks中的值,但这对main中的可评价值没有影响,因此当您致电printHisto counter1时,counter2仍然为零。

你应该理解的是,即使它们具有相同的名称,不同函数中的变量也是不同的变量。如果您希望readExamMarks更改main中的变量,则应使用引用。

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

使用int&代替int counter1counter2现在引用main中的变量,而不是< em>复制中的变量。

答案 1 :(得分:0)

printHisto(examMarks, 5, counter1, counter2);

不打印任何原因是counter1和counter2初始化为0,并且它们原样传递给printHisto(...),我的猜测是你打算用readExamMarks(...)来修改你的计数器(1) ,2),如果是这种情况,请通过ref http://www.cplusplus.com/doc/tutorial/functions2/

传递它们