#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main ()
{
srand(time(0));
int i = rand()% 100 +1;
cout << "Я загадал число, гадай";
int j;
cin >> j;
switch (j)
{
case (i>j):
cout << "Моё число больше" << endl;
break;
case (i<j):
cout << "Твоё число больше :(" << endl;
break;
case (i=j):
cout << "Угадал)" << endl;
break;
default
cout << "Введи число" << endl;
break;
}
}
знаю что можно легко через if else сделать правильно, но захотелось через свитч. В чём ошибка кода?
C/C++
Код для "Угадай число"
#include <iostream>
#include <random>
using namespace std;
enum class State { Smaller, More, Equals };
State state(int x, int y) {
if (y < x) return State::Smaller;
if (y > x) return State::More;
return State::Equals;
}
int rand(int a, int b) {
uniform_int_distribution<> uid(a, b);
mt19937 gen{ random_device()() };
return uid(gen);
}
void game(int a, int b) {
if (a > b) swap(a, b);
const auto x = rand(a, b);
cout << "Угадай число от " << a << " до " << b << " включительно!\n";
auto y = a - 1;
while (y != x) {
cout << ">>> ";
cin >> y;
switch (state(x, y)) {
case State::Smaller: puts("<<< Меньше..."); break;
case State::More: puts("<<< Больше..."); break;
case State::Equals: puts("<<< Угадал!"); break;
}
}
}
int main() {
system("chcp 1251 > nul");
auto a = 1;
auto b = 100;
game(a, b);
system("pause > nul");
}
P.S. Ошибка в том, что switch здесь неуместен.
#include <random>
using namespace std;
enum class State { Smaller, More, Equals };
State state(int x, int y) {
if (y < x) return State::Smaller;
if (y > x) return State::More;
return State::Equals;
}
int rand(int a, int b) {
uniform_int_distribution<> uid(a, b);
mt19937 gen{ random_device()() };
return uid(gen);
}
void game(int a, int b) {
if (a > b) swap(a, b);
const auto x = rand(a, b);
cout << "Угадай число от " << a << " до " << b << " включительно!\n";
auto y = a - 1;
while (y != x) {
cout << ">>> ";
cin >> y;
switch (state(x, y)) {
case State::Smaller: puts("<<< Меньше..."); break;
case State::More: puts("<<< Больше..."); break;
case State::Equals: puts("<<< Угадал!"); break;
}
}
}
int main() {
system("chcp 1251 > nul");
auto a = 1;
auto b = 100;
game(a, b);
system("pause > nul");
}
P.S. Ошибка в том, что switch здесь неуместен.
case (i>j): тут всегда константа должна же быть


Юрий Кадук
Т.е через свитчи никак не получится?
#include <iostream>
using namespace std;
int main()
{
srand(time(NULL));
int i = rand() % 100 + 1;
cout << "Ya zagadal chislo, vvedite svoe\n";
int j, p;
//cout << i;
do
{
cin >> j;
p = (i < j) - (i > j);
switch (p) {
case 0: cout << "Ugadal!\n"; break;
case 1: cout << "Vashe chislo bolshe, poprobuyte drugoe)\n"; break;
case -1: cout << "Moye chislo bolshe, vvedite drugoe\n"; break;
}
} while (p);
cout << "Game over!";
}
Для свитча преобразовываем логику в число, дополнительно введя переменную p, и на ней делаем так же проверку цикла.
Заметил что библиотека ctime уже входит в iostream в новейшей версии MSVS2022.
using namespace std;
int main()
{
srand(time(NULL));
int i = rand() % 100 + 1;
cout << "Ya zagadal chislo, vvedite svoe\n";
int j, p;
//cout << i;
do
{
cin >> j;
p = (i < j) - (i > j);
switch (p) {
case 0: cout << "Ugadal!\n"; break;
case 1: cout << "Vashe chislo bolshe, poprobuyte drugoe)\n"; break;
case -1: cout << "Moye chislo bolshe, vvedite drugoe\n"; break;
}
} while (p);
cout << "Game over!";
}
Для свитча преобразовываем логику в число, дополнительно введя переменную p, и на ней делаем так же проверку цикла.
Заметил что библиотека ctime уже входит в iostream в новейшей версии MSVS2022.
1) Вероятно вы имели ввиду i==j, там должен бытьь оператор сравнения
2) Вероятно ввод переменной j и switch нужно пометсить в цикл, иначе это произойдёт только один раз и выиграть практически не реально.
3) Если вы пользуетесь windows, то по умолчанию в консоле не поддерживаются русские буквы
4) Значения в case-ах должныбыть константными
5) После default требуется двоеточие
2) Вероятно ввод переменной j и switch нужно пометсить в цикл, иначе это произойдёт только один раз и выиграть практически не реально.
3) Если вы пользуетесь windows, то по умолчанию в консоле не поддерживаются русские буквы
4) Значения в case-ах должныбыть константными
5) После default требуется двоеточие
Похожие вопросы
- Код должен находить наименьшее число в массиве, но это всегда почему то 0. Где ошибка?
- C++: "С-Строка" и ошибка
- (Ошибка) аргумент типа "const char *" несовместим с параметром типа "char *"
- Хелпаните плиз, надо код перестроить на N вещестные числа и для вычесления гометрической прогрессии.
- Нужна помощь с написанием кода на языке "С"
- Код работает некорректно. Язык Си. Нахождение максимального отрицательного элемента матрицы и замена его числом.
- Задача "Числа Фибоначчи"
- Салют Амигос) Откуда в рабочем коде выскакивает несуществующие число. Сделайте ревью по фасту. Много сил не отнимет))
- Задан одномерный массив целых чисел создать код на C++
- Напишите пожалуйста код на 5 вариант очень простой я на 1 курсе вуза и нужен простой код.