Как напечатать 7 дней недели, введя данные пользователя? - PullRequest
3 голосов
/ 06 мая 2020

Проблема заключается в том, что когда я впервые запускаю свою программу и ввожу 5, программа вернет Пятница и после этого нажмите y , чтобы перезапустить операцию, не закрывая консоль, и введите 9 программа вернет сообщение об ошибке по умолчанию, а также Friday , что является серьезной ошибкой в ​​моем коде, и я не могу определить, что делает ее неправильной. Код:

#include <iostream>
#include <limits>
using namespace std;

enum Dayofweek {monday = 1 , tuesday = 2, wednesday = 3, thursday = 4, friday = 5, saturday = 6, sunday = 7};
string Day (Dayofweek);
int main()
{
    int i;
    char resTart;
    Dayofweek d = monday;
    do
    {
        cin.clear();
        system ("cls");
        cout << "Enter the day of a week:[1] [2] [3] [4] [5] [6] [7]:  ";
        while (!(cin >> i))
        {
        //system ("cls");
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        system ("cls");
        cout << "Invalid Input detected, Only numbers are allowed. 1, 2, 3, 4 ,5 ,6 ,7. Try Again." << '\n';
        cout << "Enter the day of a week: ";
        }
    cout << Day (Dayofweek (i)) << '\n';
    do
    {

        cin.clear();
        cout << "Do you want to Continue [Y/n]" << '\n';
        cin >> resTart;
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        system ("cls");
    }while (resTart != 'Y' && resTart != 'y' && resTart != 'N' && resTart != 'n' );

    }while (resTart == 'Y' || resTart == 'y');

}
string Day (Dayofweek d)
{
    switch (d)
    {
        case 1:
        return "Monday";
        case 2:
        return "Tuesday";
        case 3:
        return "Wednesday";
        case 4:
        return "Thursday";
        case 5:
        return "Friday";
        case 6:
        return "Saturday";
        case 7:
        return "Sunday";
        default:
            cout << "Invalid Input detected, Only numbers are allowed in limit to 7 days of week, Try Again." << '\n';
    }
}

OutPut в консоли: введите день недели: 1 [2] [3] [4] [5] [6] [7]: 9 Обнаружен недопустимый ввод, разрешены только числа. 1, 2, 3, 4, 5, 6, 7. Попробуй еще раз. Пятница. Продолжить? [Y / n]

enter image description here

Ответы [ 2 ]

3 голосов
/ 06 мая 2020

Функция Day должна возвращать string. Однако вы не возвращаете string в случае default оператора switch, который вызывает неопределенное поведение (в вашем случае функция вернула «Friday», но может произойти все, что угодно, ).

Вам необходимо вернуть что-то , чтобы программа была четко определена:

string Day (Dayofweek d)
{
    switch (d)
    {
        case 1:
        return "Monday";
        // etc ...  
        case 7:
        return "Sunday";
        default:
            cout << "Invalid Input detected, Only numbers are allowed in limit to 7 days of week, Try Again." << '\n';
        return "not a day";
    }
}

Я настоятельно рекомендую включить все предупреждения в вашем компиляторе (например, с gcc и clang, вы можете передать -Wall как флаг компиляции). Компилятор сообщит вам, что вы делаете что-то неправильно.

1 голос
/ 06 мая 2020

Просто верните пустую строку, когда выполнение завершится с недопустимым значением.

string Day (Dayofweek d)
{
    string null;
    switch (d)
    {
        case 1:
        return "Monday";
        case 2:
        return "Tuesday";
        case 3:
        return "Wednesday";
        case 4:
        return "Thursday";
        case 5:
        return "Friday";
        case 6:
        return "Saturday";
        case 7:
        return "Sunday";
        default:
            cout << "Invalid Input detected, Only numbers are allowed. 1, 2, 3, 4 ,5 ,6 ,7. Try Again." << '\n';
        return string (null);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...