Cin не дает требуемых результатов

#c

#c

Вопрос:

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

 #include <iostream>
#include <sstream>

using namespace std;

int main()
{
    int name;
    int Seatnumber;
    int optionnumber = 1-5 ;
    std::string out_string;
    std::stringstream ss;
    ss << optionnumber;
    out_string = ss.str();

    cout << "Welcome to the COS1511 Flight Booking System" "n" << endl;
    cout << "Enter full name : " << endl;
    cin >> name ; "n";

    cout << "n" "The Available travel times for flights are:" << endl;
    cout << "         Depart                Arrive" << endl;
    cout << "1.       7.00                  9.30"  << endl;
    cout << "2.       9.00                  11.30" << endl;
    cout << "3.       11.00                 13.30" << endl;
    cout << "4.       13.00                 15.30" << endl;
    cout << "5.       15.00                 17.30" << endl;
    cout << "Choose the time by entering the option number from the displayed list : " << endl;

    cin >> optionnumber ;

    if (optionnumber == 1-5){
        cout << "n" "The available seats for are as follows " << endl;
    }
    else
        cout << "Incorrect option! Please Choose from 1-5 " << endl;

        cout << "First Class(1920)" << endl;
        cout << "|A1||A2||A3|----|A4||A5||A6|" << endl;
        cout << "|B1||B2||B3|----|B4||B5||B6|" << endl;
        cout << "|C1||C2||C3|----|C4||C5||C6|" << endl;
        cout << "|D1||D2||D3|----|D4||D5||D6|" << endl;
        cout << "| Economy Class(1600)" << endl;
        cout << "|E1||E2||E3|----|E4||E5||E6|" << endl;
        cout << "|F1||F2||F3|----|F4||F5||F6|" << endl;
        cout << "|G1||G2||G3|----|G4||G5||G6|" << endl;
        cout << "|H1||H2||H3|----|H4||H5||H6|" << endl;
        cout << "|I1||I2|" << endl;
        cout << "Please Key in a seat number to choose a seat(eg: A2)" << endl;
        cin >> Seatnumber;
}
  
  1. предложите пользователю ввести свое имя.
  2. Затем отобразите меню, показывающее доступное время для полета. пользователь может выбрать предпочтительное время отправки (вариант 1-5) выбранный вариант должен быть проверен на 1-5
  3. если пользователь ввел правильное время, следующему пользователю должно быть показано расположение мест для этого конкретного времени полета, чтобы пользователь мог выбрать место.

Комментарии:

1. if (optionnumber == 1-5) не то, что вы ожидали, смотрите Мой ответ

2. Я настоятельно рекомендую использовать std::getline вместо std::cin >> whatever; для ввода, ориентированного на строку.

3. Я предположил, что мой ответ решил ваш вопрос, это не так?

Ответ №1:

Предупреждение

 int optionnumber = 1-5 ;
  

делает

 int optionnumber = -4 ;
  

и

 if (optionnumber == 1-5){
  

делает

 if (optionnumber == -4){
  

но вы хотели if ((optionnumber >= 1) amp;amp; (optionnumber <= 5))

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

Нет, каким бы ни был результат приведенного выше теста, вы продолжаете и пишете "First Class(1920)" и т.д., Даже если выбор неверен


в

   cin >> name ; "n";
  

чего вы ожидали от "n" ?

Я рекомендую вам проверить успешность чтения, в настоящее время, если пользователь не вводит целое число, вы не знаете, что

Но вы уверены, что имя должно быть целым числом? Вероятно, это должна быть s строка


out_string не используется, его можно удалить


Очевидно, что Seattnumber — это не int, а строка (A1 …)


вероятно, вы хотите выполнять цикл до тех пор, пока не будет введено допустимое время, а также устранять другие проблемы, решение которых может быть :

 #include <iostream>
#include <string>

using namespace std;

int main()
{
  string name;
  string Seatnumber;
  int optionnumber;

  cout << "Welcome to the COS1511 Flight Booking System" "n" << endl;
  cout << "Enter full name : " << endl;

  if (!(cin >> name))
    // EOF (input from a file)
    return -1;

  cout << "n" "The Available travel times for flights are:" << endl;
  cout << "         Depart                Arrive" << endl;
  cout << "1.       7.00                  9.30"  << endl;
  cout << "2.       9.00                  11.30" << endl;
  cout << "3.       11.00                 13.30" << endl;
  cout << "4.       13.00                 15.30" << endl;
  cout << "5.       15.00                 17.30" << endl;
  cout << "Choose the time by entering the option number from the displayed list : " << endl;

  for (;;) {
    if (!(cin >> optionnumber)) {
      // not an int
      cin.clear(); // clear error

      string s;

      // flush invalid input
      if (!(cin >> s)) 
        // EOF (input from a file)
        return -1;
    }
    else if ((optionnumber >= 1) amp;amp; (optionnumber <= 5))
      // valid choice
      break;

    cout << "Incorrect option! Please Choose from 1-5 " << endl;
  }

  cout << "n" "The available seats for are as follows " << endl;
  cout << "First Class(1920)" << endl;
  cout << "|A1||A2||A3|----|A4||A5||A6|" << endl;
  cout << "|B1||B2||B3|----|B4||B5||B6|" << endl;
  cout << "|C1||C2||C3|----|C4||C5||C6|" << endl;
  cout << "|D1||D2||D3|----|D4||D5||D6|" << endl;
  cout << "| Economy Class(1600)" << endl;
  cout << "|E1||E2||E3|----|E4||E5||E6|" << endl;
  cout << "|F1||F2||F3|----|F4||F5||F6|" << endl;
  cout << "|G1||G2||G3|----|G4||G5||G6|" << endl;
  cout << "|H1||H2||H3|----|H4||H5||H6|" << endl;
  cout << "|I1||I2|" << endl;

  cout << "Please Key in a seat number to choose a seat(eg: A2)" << endl;
  cin >> Seatnumber;

  return 0;
}
  

Компиляция и выполнение :

 pi@raspberrypi:/tmp $ g   -pedantic -Wextra -Wall cc.cc
pi@raspberrypi:/tmp $ ./a.out
Welcome to the COS1511 Flight Booking System

Enter full name : 
bruno

The Available travel times for flights are:
         Depart                Arrive
1.       7.00                  9.30
2.       9.00                  11.30
3.       11.00                 13.30
4.       13.00                 15.30
5.       15.00                 17.30
Choose the time by entering the option number from the displayed list : 
aze
Incorrect option! Please Choose from 1-5 
7
Incorrect option! Please Choose from 1-5 
2

The available seats for are as follows 
First Class(1920)
|A1||A2||A3|----|A4||A5||A6|
|B1||B2||B3|----|B4||B5||B6|
|C1||C2||C3|----|C4||C5||C6|
|D1||D2||D3|----|D4||D5||D6|
| Economy Class(1600)
|E1||E2||E3|----|E4||E5||E6|
|F1||F2||F3|----|F4||F5||F6|
|G1||G2||G3|----|G4||G5||G6|
|H1||H2||H3|----|H4||H5||H6|
|I1||I2|
Please Key in a seat number to choose a seat(eg: A2)
qsd
pi@raspberrypi:/tmp $ 
  

Обратите внимание, что ввод имени с помощью cin >> name не позволяет ему содержать несколько имен, разделенных пробелом, чтобы можно было использовать getline составного имени

Комментарии:

1. да, я идиот. Я объявил name как целое число. Я часто часами застреваю в поисках глупой ошибки, подобной этой. Спасибо за помощь, она работает отлично.