2013-12-05 3 views
-2
#include <iostream> 

using namespace std; 

void counter(int input[], int *output); 

int main() 
{ 
    int input[15], output[10] = {0}; 

    for (int i = 0; i < 15; i++) 
     cin >> input[i]; 

    for (int i = 0; i < 10; i++) 
     cout << i << " appears " << counter(input[], output[]) << " times in the input." << endl; 

    return 0; 
} 

void counter(int input[], int *output){ 
    for(int i = 0; i < 15; i++){ 
     switch(input[i]){ 
      case 1: 
       output[0]++; 
      case 2: 
       output[1]++; 
      case 3: 
       output[2]++; 
      case 4: 
       output[3]++; 
      case 5: 
       output[4]++; 
      case 6: 
       output[5]++; 
      case 7: 
       output[6]++; 
      case 8: 
       output[7]++; 
      case 9: 
       output[8]++; 
      case 10: 
       output[9]++; 
     } 
    } 
} 

Я пишу функцию, где мне нужно передать массив в качестве ссылки на нее, нет ошибок, но когда я пытаюсь прочитать элементы в основной функции, они все 0, как первоначально инициализировано.Передача массива в качестве ссылки на функцию

+3

Это было из предыдущего воплощения отправленного кода. Но последнее не будет компилироваться. Не редактируйте код примера «на лету». Создайте наименьший образец, который вы можете придумать, компилирует, запускает и показывает проблему, а затем публикует это. –

+0

Я называю это 'counter (input, output)', и я получаю сообщение об ошибке - нет соответствия для 'operator <<' в 'std :: operator <<'. – user3002211

+0

Функция возвращает void, и вы хотите ее распечатать? – JoeC

ответ

4

Ваш counter() функцию (которую вы могли бы написать в значительно меньше строк - это упражнение для последующих) возвращает пустоту.

Итак:

cout < counter(foo, bar) 

Не печатает содержимое любого массива. Он напечатал бы void, если бы это имело смысл. Но поскольку это не имеет смысла, это ошибка компиляции.

Вы, вероятно, хотите:

// fill input 
for (int i = 0; i < 15; i++) 
    cin >> input[i]; 

// fill output 
counter(input,output); 

// print contents of output 
for (int i = 0; i < 10; i++) 
    cout << i << " appears " << output[i] << " times in the input." << endl; 
+0

Это похоже на работу, однако .. есть проблема со значением вывода [i], похоже, одинаковы для каждого элемента. Он никогда не сбрасывается? – user3002211

+2

@ user3002211 Ну, вы также забыли «ломать» в этом 'переключателе' внутри каждого' case' – memo1288

+1

@ user3002211 хорошо пятнистый. И (как я намекал), в любом случае нет необходимости в «переключении». 'case 1: foo [0]; case 2: foo [1] ... '- нарисовать шаблон? Может быть, что-то математическое? – slim

1

вы не использовали функцию: D, пожалуйста, используйте его перед печатью :)

попробовать это:

int main() 
{ 
    int input[15], output[10] = {0}; 

    for (int i = 0; i < 15; i++) 
     cin >> input[i]; 


    counter(input, output); 

    for (int i = 0; i < 10; i++) { 
     cout << i << " appears " << output[i] << " times in the input." << endl; 
    } 

    return 0; 
} 
+0

'<< counter (...)' – raina77ow

+0

'counter (input [], output [])'? – JoeC

+0

его там не было, когда я отправлял сообщения! :) –

Смежные вопросы