2013-04-22 3 views
0

Я не могу понять, как исправить этот код.Функция struct array input cin problems

void getInfo(Author a[], int size) 
{ 
    for(int x = 0; x < size; x++) 
     { 
      cout << "Enter the author's name: "; 
      getline(cin, a[x].name); 

      if(a[x].name == "NONE") 
       break; //Breaks the loop if the author has no further books 
      else 

      for(int y = 0; y < size; y++) 
       { 
        cout << "Enter title " << y+1 << " :"; 
        getline(cin, a[x].book[y].title); 

        if(a[x].book[y].title == "NONE") 
         break; 
        else 
         cout << "Enter price " << y+1 << " : $"; 
         cin >> a[x].book[y].price; 
       } 
      cout << endl; 
     } 
} 

Вот как это компилирует:

Get user's input: 
Enter the author's name: John Smith 
Enter title 1: How to Tie a Shoe 
Enter price 1: 20 
Enter title 2: Enter price 2: 

Может кто-то пожалуйста, помогите мне понять, как исправить эту петлю. Когда я пробую getline(cin, a[x].book[y].price);, визуальная студия говорит мне, что она перегружена.

+0

Попробуйте 'cin.ignore (1, '\ n');' после того, как вы прочитаете цену. И, возможно, попробуйте некоторые фигурные скобки вокруг этого блока или лучше все-таки избавиться от else целиком (тот, что в for-loop). – WhozCraig

+0

попробуйте 'cin.ignore (numeric_limits :: max(), '\ n')'. читает столько символов, пока вы не получите '\ n' и отбросит его. –

ответ

0

Для решения проблемы воспользуйтесь cin.ignore(); после cin >>.

std::getline принимает второй номер параметра std::string.

Это думает, что вы передаете ему числовую переменную getline(cin, a[x].book[y].price);.

+0

Я не вижу эту линию нигде ... –

+0

@ bash.d ее в своем списке предложение вопроса. – WhozCraig

+0

Ладно, спасибо, я понял. –