В моей программе, предназначенной для хранения заметок, я дважды использую 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: