我正在尝试根据使用的数字输入一个程序打印出一个星号,例如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");
}
答案 0 :(得分:3)
您的代码有点奇怪,我在跟踪它时遇到了一些麻烦。但是我认为你所犯的错误就是假设因为你在counter1
增加变量counter2
和readExamMarks
然后会以某种方式影响counter1
的值和counter2
中的printHisto
。这不是真的。您更改了readExamMarks
中的值,但这对main
中的可评价值没有影响,因此当您致电printHisto
counter1
时,counter2
仍然为零。
你应该理解的是,即使它们具有相同的名称,不同函数中的变量也是不同的变量。如果您希望readExamMarks
更改main
中的变量,则应使用引用。
void readExamMarks(int examMarks[], int sizeOfArray, int& counter1, int& counter2)
{
...
}
使用int&
代替int
counter1
和counter2
现在引用到main
中的变量,而不是< em>复制中的变量。
答案 1 :(得分:0)
printHisto(examMarks, 5, counter1, counter2);
不打印任何原因是counter1和counter2初始化为0,并且它们原样传递给printHisto(...),我的猜测是你打算用readExamMarks(...)来修改你的计数器(1) ,2),如果是这种情况,请通过ref http://www.cplusplus.com/doc/tutorial/functions2/
传递它们