SDL / C ++&&运算符 - Lazyfoo教程

时间:2017-04-21 13:50:28

标签: c++ sdl

我正在从Lazyfoo.net教程学习SDL,在章节" 32_text_input_and_clipboard_handling"中,我无法理解下面的代码如何正常工作。 (我发送邮件给lazyfoo联系人,但还在等待回复)

   if(!((e.text.text[0] == 'c' || e.text.text[0] == 'C') && 
   (e.text.text[0] == 'v' || e.text.text[0] == 'V') && 
   SDL_GetModState() & KMOD_CTRL))
   {
     //Append character
     inputText += e.text.text;
     renderText = true;
   }

这个代码函数是忽略/检查我们没有得到ctrl和c / v事件,它是按照教程工作的,但是如何? 有两个"&&"这段代码中的运算符意味着必须满足所有三个条件来执行花括号内的代码!

这意味着代码忽略了

  

ctrl AND c AND v如下图所示

Image Link for Ctrl + C + v (Ctrl AND c AND v)

而不是

  

ctrl和c / v,如下图所示

Image Link for Ctrl + C / v (Ctrl AND c OR v)

但有些如何在C ++ / SDL中用ctrl和c / v ???

1 个答案:

答案 0 :(得分:0)

if语句使用!进行否定,如果满足所有三个条件,则布尔值为true,但是否则为false,否则为false。类似地,当没有按下ctrl + c / v时,3个条件将返回布尔值false,该值被否定为true,允许执行if语句中的代码。

如果你用英语写这个条件,那就是:如果ctrl + c和ctrl + v 按下。 < / p>