2013-04-06 185 views
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"); 
} 

回答

3

你的代碼是有點怪,而且我在下面也有些麻煩。但我認爲你錯誤地認爲你是在假設因爲你增加了變量counter1counter2readExamMarks然後以某種方式影響counter1counter2printHisto的值。這不是真的。您更改了readExamMarks中的值,但對main中的可用值無效,因此當您撥打printHisto時,counter1counter2仍然爲零。

你應該理解的是,即使它們具有相同的名稱,不同函數中的變量也是不同的變量。如果您想要readExamMarks更改main中的變量,則應使用引用。

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

通過使用int&代替intcounter1counter2現在在main引用的變量,而不是副本中主要的變量

+0

我已經學習了大約一個星期,所以我真的不知道編碼正確,如果不是這樣的話,那麼是有可能通過readExamMarks將counter1和counter2作爲參數傳遞給printHisto? – Thomas 2013-04-06 11:30:23

+0

@Thomas,不僅僅是因爲readExamMarks不會調用printHisto。兩者都從main調用。正如我在上面解釋的,你需要使用引用來實現你想要的。 – john 2013-04-06 11:32:52

+0

謝謝,這對我有幫助。 – Thomas 2013-04-06 11:43:58

0
printHisto(examMarks, 5, counter1, counter2); 

不會打印出任何東西的原因是C1與C2的被初始化爲0,並且它們被傳遞,因爲它是對printHisto(...),我的猜測是,你打算readExamMarks(...)來修改你的櫃檯(1,2),如果是這種情況,通過他們參考http://www.cplusplus.com/doc/tutorial/functions2/

相關問題