Программа продолжает разрываться в бесконечный цикл при попытке ввода пользовательского времени, используя cin с циклом do while в c ++ - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь написать программу для класса, в которой мы должны взять пользовательское время (время отправления + время прибытия), а затем вывести все, что пользователь написал в консоль.Я использую цикл do while.Я использую оператор if для проверки записи свойства.Когда я запускаю программу каждый раз, она снова и снова спрашивает время прибытия.Мне нужно добавить «am» или «pm» в зависимости от того, что ввел пользователь, поэтому этот массив символов из двух значений присутствует.ПОЖАЛУЙСТА, помогите

char ampm1[2];

    // char ampm = 'p';
    int temp;
    do 
    {
        cout << "Please enter your arrival time in the following format: '10:30'. This IS NOT MILITARY TIME.";
        cin >> temp;
        arrival_hour = temp / 100;
        arrival_min = temp % 100;
        cout << "Is this AM or PM?";
        cin >> ampm1;
    } 
    while (arrival_hour > 12 || arrival_hour < 0 || departure_min >= 60);




    cout << "Your arrival time is: " << setfill('0') << setw(2) << arrival_hour << ":" << setfill('0') << setw(2)
        << arrival_min << ampm1;

1 Ответ

0 голосов
/ 30 апреля 2019

Некоторые проблемы, которые я обнаружил в вашем фрагменте кода:

1) ampm1 - это массив символов с размером 2, хотя вы хотите сохранить «am» или «pm», которые техническитребует 2 + 1 = 3 байта (1 байт для нулевого терминатора).Это приведет к неожиданному поведению строки и неправильному использованию.

2) Вы указали temp как целое число и ожидаете ввода в формате: ЧЧ: ММ.Это опять неверно.То, что вы можете сделать, это получить входные данные в виде строки и разделить их на «:».Далее вы можете использовать atoi () для преобразования HH и MM в целочисленные компоненты.

...