Рейтинг:
51
Midi_Mick
Аналогично решению Джона, но с использованием вашего требования switch
заявление. Он разбивает баллы на 3 возможных значения и Выполняет переключение на основе этих значений.
int x=0;
printf("Enter your score:\n");
scanf("%i",&x);
switch (x >= 0 ? (x >= 50 ? 1 : 0) : -1) {
case 0:
printf("You didn't pass");
break;
case 1:
printf("You passed");
break;
default:
printf("Not Valid");
break;
}
Klajdi Murati
Большое спасибо. Это было фактическое решение, которое я искал. :D
#realJSOP
Мое решение очень похоже на взлом Kobiashi-Maru-оно имело то преимущество, что никогда не было опробовано раньше. :)
Albert Holguin
Хотя это соответствует требованиям ОП, это, конечно, некрасиво.... Никогда не используйте это в реальном производственном коде.
Рейтинг:
39
Albert Holguin
Назовите меня предвзятым, но мне больше нравится мое решение... :)
#include <stdio.h>
int main() {
unsigned x=0;
printf("Enter your score:\n");
scanf("%u",&x);
/*let's use math instead*/
int val = x/50;
switch(val)
{
case 0:
printf("You didn't pass.");
break;
case 1:
case 2:
printf("You passed.");
break;
default:
printf("Not valid");
break;
}
getch();
return 0;
}
Richard MacCutchan
Я считаю, что это на самом деле правильный ответ. Предполагая (что наиболее вероятно), что оценка находится в диапазоне [1..100].
Albert Holguin
Ну, это также объясняет и негативы (вы получите "недействительный" для негативов, так как результат val будет огромным). Однако он также допускает значения до 149, что, по-моему, было бы правильно, учитывая, что "дополнительный кредит" обычно может повысить оценку чуть выше 100.
Midi_Mick
Я действительно думал об этом, но тогда это означает, что все, что больше 100, является действительным до 149 и недействительным, если больше этого, что мне не понравилось, поэтому я выбросил его. Это также неверно в том смысле, что баллы между -1 и -49 также возвращают 0, а не -1, поэтому выглядят как неудача, а не недействительность.
Albert Holguin
От -1 до -49 не возвращают 0, если вы используете unsigned int, и да, 100-149 также действительны, но я подумал, что это приемлемо, учитывая требования OP.
Рейтинг:
22
#realJSOP
Не рекомендуется использовать оператор case без некоторой предварительной обработки, которая, вероятно, включала бы использование страшного if/else if...
но если вы просто пытаетесь быть другим, вы можете попробовать это:
int x = 0;
string status = "";
status = (status == "" && x >= 50) ? "You passed" : status;
status = (status == "" && x >= 0 && x < 50) ? "You failed" : status;
status = (status == "" && x < 0) ? "Not valid" : status;
Приведенный выше код был написан на C#, но он должен довольно легко переводиться на C. Приведенный выше код был протестирован с "x", установленным в -1, 0, 30 и 51