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