std :: getline, используемый дважды в коде, пропускает ко второй getline - PullRequest
0 голосов
/ 25 марта 2019

В моей программе, предназначенной для хранения заметок, я дважды использую std :: getline, чтобы сначала запросить у пользователя название заметки, а затем запросить тело заметки.При запуске программы она пропускает первую строку getline и переходит прямо ко второй.

Я пробовал std :: cin, cin.ignore (), cin.sync () и std :: getline, конечно.

У меня всего три файла.Заголовок и файл класса, а также основной файл.Чтобы показать, какой код имеет значение, я показываю только фрагменты файла класса и основного файла, в которых возникает проблема.

notebook.cpp

// -- snip --

Note Note::create_note() {
  Note s;
  std::string title;
  std::string note;
  std::cout << "\nPlease enter the note's title: \n";
  std::getline(std::cin, title);
  s.set_title(title);
  std::cout << "Please enter the note: ";
  std::getline(std::cin, note);
  s.set_body(note);
  std::cout << "Note added!\n\n";
  return s;
}

// -- snip --

tuffynotes.cpp

// -- snip --

char choice;
Note n;
// For storing up to 100 notes.
Note notes[100];
int size = 0;
// used for looping until user is done
bool flag = true;
int main() {
  while (flag) {
    std::cout << "Welcome to TuffyNotes!\n";
    std::cout << "[C] Create a note\n[L] List notes\n[V] View note\n[E] Exit\nChoice: "; 
    std::cin >> choice;
    std::cout << "\n";
    switch (choice) {
      case 'C':
      case 'c':
        notes[size] = n.create_note();
        size++;
        break;
      // -- snip --
    }
  }
}

В выводе указано

Please enter the note's title: 
Please enter the note: 

когда он должен сначала позволить мне ввести заголовок, прежде чем перейти прямо к запросу ввода для тела.

Please enter the note's title:
...