Просто поделитесь решением Ли с вопросами и проблемами комментариев, где это возможно:
public static T Clamped(this T value, T min, T max) where T : IComparable {
if (value == null) throw new ArgumentNullException(nameof(value), "is null.");
if (min == null) throw new ArgumentNullException(nameof(min), "is null.");
if (max == null) throw new ArgumentNullException(nameof(max), "is null.");
//If min <= max, clamp
if (min.CompareTo(max) <= 0) return value.CompareTo(min) < 0 ? min : value.CompareTo(max) > 0 ? max : value;
//If min > max, clamp on swapped min and max
return value.CompareTo(max) < 0 ? max : value.CompareTo(min) > 0 ? min : value;
}
Различия:
ed
), чтобы (далее) указать, что значение не зажато на месте, и вместо этого возвращается новое значение (см. Комментарий @ JimBalter ). null check
для всех входов (см. @ комментарий JeppeStigNielsen ). min
и max
, если min > max
(См. @ комментарий JeppeStigNielsen ). Ограничения: Без односторонних зажимов. Если max
- NaN
, всегда возвращается NaN
(см. комментарий Германа ).
Как ответил Здан, printf
не пишет напрямую в консоль, а записывает в стандартный поток вывода с помощью WriteFile
Windows API, который, в свою очередь, вызывает [112 ] системный вызов. Затем выходные данные выбираются хостом консоли conhost.exe
и отображаются на консоли Windows.
printf
не записывает данные напрямую в консоль, а записывает данные в выходной поток. Это консольный хост (conhost.exe
), который берет данные из выходного потока и записывает их в консоль.
Существует весь API для доступа к консоли. Например, функция WriteConsole
.