Пока цикл не выходит из программы при использовании клавиши ввода - PullRequest
0 голосов
/ 08 октября 2018

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

Это моя программа, содержащая основную функцию:

#include <iostream>
#include "date.h"
#include <string>

using namespace std;

int main()
{

    dateType date1(1, 6, 2000);
    dateType date2(15, 20, 2018);
    dateType date3(2, 30, 2019);
    dateType date4;

    date1.printDate();
    cout << endl;
    date2.printDate();
    cout << endl;
    date3.printDate();
    cout << endl;

    string test;

    int month, day, year;

    cout << "Enter month day year: " << endl;
    cin >> month >> day >> year;

    date4.setDate(month, day, year);
    date4.printDate();
    cout << endl;

    cin.clear();
    cout << "press any key to continue... ";

    while (getline(cin, test)) {
    if (test.empty()) 
        break;

    }
    return 0;
}

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

Как сделать так, чтобы цикл while выполнялся правильно?

1 Ответ

0 голосов
/ 08 октября 2018

Ваше намерение здесь неясно, но я все равно попытаюсь ответить на него, в первую очередь, для того, чтобы стандартный ввод был передан в программу, нужно нажать клавишу ввода, по крайней мере, в Linux.Слушатели нажатия клавиш - не вещь в консольных приложениях, если не используется сложная сторонняя библиотека, которая порождает рабочий поток, который прослушивает нажатия клавиш в фоновом режиме.

Осталось только проверить, является ли введенный ввод пустым или содержит какие-либо данные.Я не вижу проблем с вашим кодом, я создал проверенный, минимизированный и проверенный пример.

#include <iostream>
#include <string>

using namespace std;

int main() {
  cout << "press any key to continue... ";

  string test;
  while (getline(cin, test)) {
    cout << test << test.length();  // For debugging purposes
    if (test.empty())
      break;
  }
  return 0;
}
...