Пожалуйста, объясните этот синтаксис PHP - PullRequest
3 голосов
/ 03 июня 2011

Я просмотрел функции в руководстве, но до сих пор не понимаю.Согласно человеку, написавшему код, если пользователь введет «y», то будет выполняться функция (здесь не показана).Однако из-за ! мне кажется, что функция (не показанная здесь) будет выполняться, если пользователь вводит что-то отличное от «y».

Пожалуйста, объясните (я относительный новичок, чтобы было как можно больше подробностей). Спасибо

if(!strncasecmp(trim(fgets(STDIN)),'y',1)) 

Ответы [ 2 ]

10 голосов
/ 03 июня 2011

fgets(STDIN) - считывает строку из стандартного ввода (клавиатура в вашем случае).

trim - удаляет все пробелы, окружающие пользовательский ввод.Поэтому, если пользователь вводит ' y' или 'y ', он будет преобразован в 'y'

strncasecmp - пользователь может ввести в верхнем регистре Y или в нижнем регистре y, эту функциюпоможет вам сравнить регистронезависимый способ.Также эта функция возвращает 0, если сравнение прошло успешно, а затем вы используете ! (не оператор), который меняет 0 на 1, так что тест if проходит.

Вы можете переписать это как:

if(strncasecmp(trim(fgets(STDIN)),'y',1) == 0) 
4 голосов
/ 03 июня 2011

Функция strncasecmp возвращает 0, если между сравниваемыми строками нет разницы , поэтому ! для проверки, равны ли они.

...