[Solved] C Looping a switch using Y/N options. Choosing N doesn’t close the program


change

scanf("%s", &input);

to

scanf(" %c", &input);

and get rid of getchar()s at the end. It will work as you wanted. %c specifier reads a char character, but it does not omit whitespace characters. Putting space onto scanf’s format will deal with whitespaces and read first non-whitespace char. To be more clear, see what man page says about %c format specifier:

(…) The usual skip of leading white space is suppressed. To skip
white space first, use an explicit space in the format.

However, if you are really learning C++, stick with cin/cout, rather than scanf/printf’s.

Here’s how your program would look like if you would replace printf/scanf with cin/cout. If you’ve done that previously, you wouldn’t had that kind of trouble.

#include <iostream>

using namespace std;

int main()
{
    int n, ok = 0;
    char input;
    while (!ok)
    {
        cout << "Choose a number between 1-4\n";
        cin >> n;

        switch (n)
        {
            case 1:
                cout << "You've chosen number 1";
                break;
            case 2:
                cout << "You've chosen number 2";
                break;
            case 3:
                cout << "You've chosen number 3";
                break;
            case 4:
                cout << "You've chosen number 4";
                break;
            default:
                cout << "You have chosen an invalid number";
        }
        cout << "\nInput again? (Y/N)\n";
        cin >> input;

        if (input=='n' || input=='N')
        {
            ok++;
        }
        else if (input=='Y' || input=='y')
        {
            cout << "\n";
        }
    }

    return 0;
}

6

solved C Looping a switch using Y/N options. Choosing N doesn’t close the program