Я посмотрел функции в руководстве, но я все еще не понимаю этого. По словам человека, написавшего код, если пользователь введет "y", функция (не показанная здесь) будет выполнена. Однако из-за ! мне кажется, что функция (здесь не показана) будет выполняться, если пользователь введет что-то отличное от "y".
Пожалуйста, объясните (я относительный новичок, поэтому было бы полезно как можно больше подробностей). Спасибо.
if(!strncasecmp(trim(fgets(STDIN)),'y',1))
Ответ 1 · рейтинг 10 · codaddict
fgets(STDIN) - читает строку со стандартного ввода (клавиатура в вашем случае).
trim - удаляет все пробелы вокруг пользовательского ввода. Поэтому, если пользователь вводит ' y' или 'y ', он будет преобразован в 'y'.
strncasecmp - пользователь может ввести Y в верхнем регистре или y в нижнем регистре, эта функция поможет вам сравнить нечувствительный к регистру способ. Также эта функция возвращает 0, если сравнение прошло успешно, а затем вы используете ! (не оператор), который изменяет 0 на 1, так что тест if проходит.
Вы можете переписать это как:
if(strncasecmp(trim(fgets(STDIN)),'y',1) == 0)
Ответ 2 · рейтинг 4 · csl
Функция strncasecmp возвращает 0, если нет разницы em> между сравниваемыми строками, поэтому ! проверяет, равны ли они.