# Logic
## Logic operation
* `==`
`==` operation will check if two arguments is the same , return `1` if it is true , return `0` if it is false
Example :
```clike
int a = 1 ;
int b = 2 ;
int c = 1 ;
char d = 'a' ;
char e = 'a' ;
int cond0 = (a == b) ;
int cond1 = (a == c) ;
int cond2 = (d == e) ;
```
```clike
cond0 : 0
cond1 : 1
cond2 : 1
```
* `>`
`>` operation check if the left one is larger than right one , similarly , return `1` if it is true and return `0` if it isn't .
Example
```clike
int a = 1 ;
int b = 2 ;
int c = 1 ;
int cond = (a > b) ;
int cond1 = (b > a);
```
```clike
cond0 : 0
cond1 : 1
```
* `<`
`<` operation check if the left one is smaller than right one , similarly , return `1` if it is true and return `0` if it isn't .
Example
```clike
int a = 1 ;
int b = 2 ;
int c = 1 ;
int cond = (a < b) ;
int cond1 = (b < a);
```
```clike
cond0 : 1
cond1 : 0
```
* `>=` , `<=`
`>=` and `<=` is similar as former two operator , but it includes the `==` situation
Example
```clike
int a = 1 ;
int b = 2 ;
int c = 1 ;
int cond0 = (a <= b) ;
int cond1 = (a <= c) ;
int cond2 = (b >= a) ;
```
```clike
cond0 : 1
cond1 : 1
cond2 : 1
```
* `!`
### String
For a char arrary , there exist a library `string.h` to compare or do the operation between two string .
* **strcmp**
compare two string ,and if they are the same , return `0` .
Example str.c :
```clike=
#include <stdio.h>
#include <string.h>
int main(){
char * test = "hello" ;
char * test2 = "hello" ;
int cond = strcmp(test , test2) ;
printf("%d\n" , cond) ;
return 0 ;
}
```
## If
`if` is a logic gate to determine whether to do the specific operation .
### Format
Single `if`
```clike
if( condition ){
operation ;
}
```
Mutiple related `if`
```clike
if( condition ){
operation ;
}
else if ( condition2 ){
operation2 ;
}
else if( condition3 ){
operation3 ;
}
```
`else` gate is all the other situation , except which inside `if` and `else if`
```clike
if( condition ){
operation ;
}
else if ( condition2 ){
operation2 ;
}
else if( condition3 ){
operation3 ;
}
else{
exception operation // 例外處理
}
```
A cleaner way to write `if` when the operation has only one line .
```clike
if (cond)
operation ;
else if (cond)
operation ;
```
### Condition
The `condition` in **Format** can replace by the logic , variables or combination of logic . The pogram will run the operation in the block if the statements equals to `1` .
* **Logic Example**
```clike
if(a > b){
printf("a is bigger than b") ;
}
```
* **Variables Example**
```clike
int a = 1 , b = 2 ;
int cond = (b < a) ;
if(cond){
printf("b is smaller than a") ;
}
```
* **Combinations**
Before showing the example , there are two way to combine .
1 . `&&` and :
if there are a and b two statements , a and b are both true .`a && b` will return `1` , otherwise `a && b` will return `0` .
2 . `||` or :
if there are a and b two statements , either a and b is true . `a || b` will return `1` , otherwise `a || b` will return `0` .
Example :
Using `if` gate to check if `c` is the biggest ,and `a` is the smallest
```clike
int a = 1 ;
int b = 2 ;
int c = 3 ;
if(c > a && c > b)
printf("c is the biggest")
if(a > c || a > b)
printf("a is not the smallest")
```
### Important Notification
If the `cond` part we put an operation in , then it will return `1` if is success , and any not-zero variable will be see as true aka `1` .
Example :
Using `if` gate to check if `a` is the smallest non-zero variable .
```clike
int a = 1 ;
int b = 2 ;
int c = 3 ;
if(a < c && a < b && a)
printf("a is the smallest and isn't zero")
```
Example 2
```clike
int a = 5 ;
if(a++ && a)
printf("Sucess") ;
```
## Application of If
### Password system
If you want your program to have privacy , you can add a gate to check if the user has the authority to use the program .
```clike=
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char * mypassword = "hahahaowo" ;
char password[100] ;
scanf("%s" , password) ;
if(!strcmp(password , mypassword))
printf("Login sucess\n");
else
printf("You don't have the authority\n") ;
return 0;
}
```
New function
`strcmp` : compare two string , if is the same return `0` .
### Print out specific sentence
The program below can print out specific sentence by choosing the number .
```clike=
#include <stdio.h>
int main()
{
int a ;
printf("Select the sentence (1 ~ 3): ");
scanf("%d" , &a) ;
if( a == 1)
printf("Hi it is 05:21 p.m now .\n") ;
else if (a == 2)
printf("How are you today ?\n") ;
else if (a == 3)
printf("I am busy now ! \n") ;
else
printf("Wrong number\n") ;
return 0;
}
```
## Switch
`switch` is another way to implement the operation due to mutiple situation .
### Format
Swtich can identify which situation that variable satisifed .
```clike
switch(variable){
case (situation) :
operation ;
break ;
case (situation2) :
operation2 ;
break ;
case (situation3) :
operation3 ;
break ;
default :
exceptional operation
break ;
}
```
We can also put in a value operation , which the program will calculate out and detect the result as `variable` we introduced above .
```clike
switch(value operation){
case (situation) :
operation ;
break ;
case (situation2) :
operation2 ;
break ;
case (situation3) :
operation3 ;
break ;
default :
exceptional operation
break ;
}
```
### Example
```clike
int a = 5 ;
switch(a){
case 5 :
printf("a is 5\n") ;
break ;
default :
printf("a isn't 5\n") ;
break ;
}
```
```clike
int a = 5 ;
switch(a % 2){
case 0 :
printf("a is even number\n") ;
break ;
case 1 :
printf("a is odd number\n") ;
break ;
default :
break ;
}
```
### Application of Switch
We can use switch to achieve the same goal as we shown at application 2 .
```clike=
int main()
{
int a ;
printf("Enter your option (1 ~ 3)\n");
scanf("%d" , &a) ;
switch(a){
case 1 :
printf("It is 07:45 pm now \n") ;
break ;
case 2 :
printf("Today is thursday !\n") ;
break ;
case 3 :
printf("kkkkkkk \n");
break ;
default :
printf("wrong number\n");
}
return 0;
}
```