Я пытаюсь сделать так, чтобы когда пользователь вводил число, программа должна повторять это много раз, выбирая случайный, если Вот мой код
cin >> d;
c = 0;
while (c < d) {
c = c++;
num = (rand() % 3) + 1;
if (num == 1) {
system("start C:\\viewver\\vw");
Sleep(2000);
}
else if (num == 2) {
system("start C:\\viewver\\vw2");
Sleep(2300);
}
else if (num == 3) {
system("start C:\\viewver\\vw3");
Sleep(1800);
}
Он всегда сначала открывает, а потом останавливается.
Опечатка: (num = 1) всегда есть true. Поднимите немного предупреждений компилятора. А c = c++; в настоящее время является UB.
и это тоже очень странно c = c++;, даже не уверен, имеет ли он четко определенное поведение
@Bathsheba - И даже если это не так ... лучше относиться к нему, как к UB;)
@DrewDormann: Нет, в C++ 14 и ранее он не определен. Это олицетворяет, почему вы не должны доверять всему, что читаете в Интернете.
Вы никогда не засеваете свой генератор случайных чисел.





Используйте ==, а не =
if (num == 1) {
system("start C:\\test\\vw");
Sleep(2000);
}
else if (num == 2) {
system("start C:\\test\\vw2");
Sleep(2300);
}
else if (num == 3) {
system("start C:\\test\\vw3");
Sleep(1800);
}
== - для сравнения, = - для присвоения
Причина, по которой он всегда выбирает первый вариант, заключается в том, что C++ (и C) имеет понятие значений truthy. Таким образом, любое значение, которое не является 0, считается истинным, тогда как значения, которые оцениваются как 0, считаются falsy.
В исходном коде, когда вы назначаете num на 1, значение num истинно, поэтому эта ветвь всегда берется
Вы пропустили УБ
он изменился, поэтому он всегда будет выбирать последний вариант, но он откроется только один раз и остановится.
num = 1не то же самое, чтоnum == 1