Другие языки программирования и технологии

С++.Почему программа зацикливается после ввода Х

Программа для вычисления системы после ввода x Программа зацикливается.
#include
#include
#include
#include
#include

int main(){

int menu = 0, x = 0;
float y = 0;

using namespace std;
while (menu != 4){
printf("1:Vvod dannux\n");
printf("2:Raschet dannux\n");
printf("3:Vuvod dannux\n");
printf("4:Vuhod\n");

scanf_s("%i", &menu);
switch (menu){
case 1:
while (1)
{
printf("Vvedite x\n");
cin >> x;
if (-1 <= x && x <= 1)
{
break;
}
}
break;
case 2:

if (x < 0)
{
y = pow(sin(x), 3) - sin(x / 2);
}
else{
y = pow(sin(x), 2) + sin(x - 1);
}

break;
case 3: if (x < 0)
{
printf("y=sin^3(x)-sin(x/2)=%f", y);
}
else{
printf("y=sin^2(x)+sin(x-1)=%f", y);
}
break;

case 4:
break;
}
}
return 0;
}
#include <iostream>
using namespace std;
int main() {
int menu = 0;
float y = 0, x = 2;
bool flag = false;
while (true) {
if (x == 2) cout << "\n1:Vvod dannux\n4:Vuhod\n";
else if (!flag) cout << "\n1:Vvod dannux\n3:Vuvod dannux\n4:Vuhod\n";
else cout << "\n1:Vvod dannux\n2:Raschet dannux\n3:Vuvod dannux\n4:Vuhod\n";
cin.sync();
cin >> menu;
switch (menu) {
case 1:
while (true) {
cout << "Vvedite x: ";
cin >> x;
if (x >= -1 && x <= 1) {
flag = true;
break;
}
}
break;
case 2:
if (x < 0) y = pow(sin(x), 3) - sin(x / 2);
else y = pow(sin(x), 2) + sin(x - 1);
break;
case 3:
if (x < 0) cout << "y = sin^3(x) - sin(x / 2) = " << y;
else cout << "y = sin^2(x) + sin(x-1) = " << y;
break;
case 4: exit(0);
}
}
return 0;
}
Танкер "казахстан"
Танкер "казахстан"
89 127
Лучший ответ
int main()
{

int menu = 0, x = 0;
float y = 0;

using namespace std;
while (menu != 4){
printf("1:Vvod dannux\n");
printf("2:Raschet dannux\n");
printf("3:Vuvod dannux\n");
printf("4:Vuhod\n");

cin >> menu;
while (!cin)
{
cin.clear();
while (cin.get() != '\n')
continue;
printf("1:Vvod dannux\n");
printf("2:Raschet dannux\n");
printf("3:Vuvod dannux\n");
printf("4:Vuhod\n");
cin >> x;
}

switch (menu){
case 1:
printf("Vvedite x\n");
cin >> x;
while (!cin)
{
cin.clear();
while (cin.get() != '\n')
continue;
printf("Vvedite x\n");
cin >> x;
}
break;
case 2:

if (x < 0)
{
y = pow(sin(x), 3) - sin(x / 2);
}
else
{
y = pow(sin(x), 2) + sin(x - 1);
}

break;
case 3: if (x < 0)
{
printf("x = %d y=sin^3(x)-sin(x/2)=%f",x, y);
}
else{
printf("x = %d y=sin^2(x)+sin(x-1)=%f",x, y);
}
break;

case 4:
break;
}
}
return 0;
}
Но я бы переписал весь код, по дурацки получается, вводишь 2 и как будто ничего не происходит. Вообще тут меню не обязательно, просто зациклить повторение программы и все. Ввел не корректное значение Х и начинается все по новой.
убери while