# learnC Hub
## 更改名稱
點選前一個紫色圈圈,點選interactive Rebase.....

左上更改為Reward,接著就可以對右邊改名

Add 添加了新功能、內容等
Modify 修改了某項內容
Fix 修復了某項功能
Remove 移除了某項功能
Optimize 優化了某項功能
Up 與前一筆變更報告一直,屬於遺漏了的補充
# 新建資料夾

1. Clone : 雲端上有的資料夾
2. Init : 建一個新的
3. Push : 將本地資料同步到雲端
4. Pull : 將雲端資料同步到本地端
5. Merge : 當pull遇到衝突(修改同行程式碼時,可用merge來合併檔案)
gitgnore Template : 想忽略的指令文件
Licence :版權

json :傳遞文字使用
條設定檔好用

左下 setting
右上 
跑出json檔 ->我們的VScode的主題設定風格
//Git
//brach 分支
// 版本
// 功能
// main 主分支
// release 發佈
// develop 開發版
// feature 功能
# Group
LearnHub\learn-group ->大家都在這裡作業、同步
step. 先推到自己的雲端,大家就可以透過merge同步

merge方法

# 3/23
#a的16進位
printf("%p\n",a);
#a在記憶體
printf("%p",&a);
8 bit字元 = 1 byte字節
int = 4 byte = 32 bit
int 所能表達的((2^32)/2)-1
short = 2 byte
long長整型
2^128 = long long (雙長整型)
門牌 64位元的資料
房間 64位元的大小
long > int ,所以從 int
&a,a=地址
printf("%p\n",&*p)
0000000000000000(空指標)(NULL)
指標用來指向記憶體位置
p的記憶體位置
int a=3
int* p= &a
int* p2= p
a的值
printf("%d\n",a)
3
a的記憶體位置
printf("%p\n",&a)
000000F4D89FFCBC
p的值
printf("%p\n",p)
000000F4D89FFCBC
p的記憶體位置
printf("%p\n",&p)
000000F4D89FFCB0
p2的值
printf("%p\n",p2)
000000F4D89FFCBC
p2的記憶體位置
printf("%p\n",&p2)
000000F4D89FFCA8
用p2的指標求的值
printf("%d\n",*p)
3
### 問題2
int a=3
int* ptr = &a
int* ptr2 = &a
*ptr =2 (更改ptr的值)
printf("%d\n", *ptr)
printf("%d\n", *ptr2)
2
2
### 問題3
int main(){
int i ;
int ARR[5]={1,2,3,4,5} ;
for(i=0 ; i<5 ; i=i+1){
printf("%d\n",*(ARR+i)) ;
}
return 0;
}
1
2
3
4
5
### 問題4
#include <stdio.h>
#define SIZE 10
void Func(int *p, int size) {
int i ;
for(i=0 ; i<size ; i++){
*(p+i)=i ;
}
}
int main(){
int ARR[SIZE] ;
int i ;
Func(ARR,SIZE );
for(i=0 ; i<SIZE ; i++){
printf("%d\n",ARR[i]) ;
}
return 0;
}
0
1
3
4
5
6
7
8
9
const int ABC =5 (常量/不可變動)
int ABC =5 (可變動)
# 3/24
### int版本一:
#include <stdio.h>
#define SIZE 10
const int ABC =5 ; //下面程式都能用
void Func(int *p, int size) {
for(int i=0 ; i<size ; i++){
*(p+i)=i ;
}
}
int main(){
int ARR[SIZE] ;
int i ;
Func(ARR,SIZE );
for(i=0 ; i<SIZE ; i++){
printf("%d\n",ARR[i]) ;
printf("%p\n",&ARR[i]) ;
}
return 0;
}
### int版本二:
#include <stdio.h>
int main(){
int ARR[] = {0,1,2,3,4,5,6,7,8,9};
for (int i = 0; i < 10; i++) {
printf("%d\n", ARR[i]);
printf("%p\n", &ARR[i]);
}
}
0
0000004062DFFC20
1
0000004062DFFC24
2
0000004062DFFC28
3
0000004062DFFC2C
4
0000004062DFFC30
5
0000004062DFFC34
6
0000004062DFFC38
7
0000004062DFFC3C
8
0000004062DFFC40
9
0000004062DFFC44
### long long版:
long long ARR[] = {0,1,2,3,4,5,6,7,8,9};
for (int i = 0; i < 10; i++) {
printf("%ld\n", ARR[i]);
printf("%p\n", &ARR[i]);
}
0
0000006D431FFC70
1
0000006D431FFC78
2
0000006D431FFC80
3
0000006D431FFC88
4
0000006D431FFC90
5
0000006D431FFC98
6
0000006D431FFCA0
7
0000006D431FFCA8
8
0000006D431FFCB0
9
0000006D431FFCB8
#include<stdio.h> //c
#include<iostream> //c++
## C++
封裝 : class
繼承 : 就是繼承 protected
多型 數量不能一樣

抽象 : 尚未見完整的class,只有完整寫完方法的才可以被new出來 (virtual)
接口
# 3/26
介紹build.bat檔
.bat(批量處理) :創建環境
.sh : Linux
ECHO 後面一定要加空格
ECHO. 換行
MD : 創建檔案
RM : 移除檔案
% : 參數
%abc% : 引用變數
%~dp0 : 類似絕對路徑 d:drive(槽) / p : path (當前執行檔所在位置)
CMD 終端機(提示命令字元) DIR
"" : 字串(\0)
'' : 字元
%s(string) : 輸出字串
%c(char) : 輸出字元
## 討論game- monster- trainer
目的:養怪獸
基礎資料:
class monster{
1. 等級:每日登入到達一定等級才能夠學習、打工、進化
* 經驗值:每日登入、上學、打工,到達一定值會升等
1. 生命值:會餓死,會隨時間降低、設定下限、會隨等級而上升
1. 清潔度:會隨時間降低、設定下限、到達一定會降低心情
1. 心情度:心情太低,不能夠學習、設定下限、
}
能夠互動(聊天、飢餓、學習、洗澡、
餵食、遊戲、洗澡
進化:
改變怪獸型態
上課學習:
需到達?等才能夠開啟
打工賺錢:
需到達?等才能夠開啟
新建class

# 4/16
###### 可對照下面的範例
m_開頭:分辨自己的東西,並讓繼承者知道
g_開頭:公開(現在不用它,過危險)
private int{get......} get是只拿取變數
(ps如果要給使用者用 需要加set)
方法開頭一定要大寫 一定要有括號!!
大括號{}是實做,方法
小括號()是參數
參數的小括號緊接大括號
*架構:f(x){}
飢餓值=原本的值+食物的值
進來的值要條件句,確定是否>0後加入
class(藍圖) 創建生成 object(實體)
創建一定要 new一個出來
var指定型態=new型態(右邊才會賦值給左邊)
變數. 其中的"."是它會什麼
? 代表變數可能是空的(Null)
break:停止並跳出這個迴圈
## C# 架構
1. 屬性 property
2. 成員變數 member var
3. 構建式 constructer (沒有回傳值)
4. 解構式 destructer(刪除之前做的,ex:釋放資源)
5. 方法:(只有它會,確定有沒有回傳值)
* 初始化 init
* 功能 func
* 資訊 info
### 範例(藍圖)
```csharp
namespace GameMonsterTrainer.Demo {
public class Monster { //建一個名為Monster的類別(藍圖)
//屬性
public int Hunger { get => m_hunger; }//拿取變數
//m_開頭:分辨自己的東西,並讓繼承者知道
//g_開頭:公開(現在不用它,過危險)
//成員變數
private int m_hunger;
//建構式
public Monster(/*參數*/int hunger) {
m_hunger = hunger;
}
//方法
public void Eat(int food) { //飢餓值增加
if (food > 0) {
m_hunger = m_hunger + food;
}
}
public void Show() { //數值顯示
Console.WriteLine($"Hunger: {Hunger}");
}
public bool cost() { //消耗
m_hunger = m_hunger - 150;
if (m_hunger <= 0 ) {
return true;
}
return false;
}
```
## 範例(program)
```csharp
using System;
using GameMonsterTrainer.Demo;
namespace GameMonsterTrainer {
public static class Program {
public static void Main(string[] args) {
Console.WriteLine("Game Monster Trainer"); //遊戲名
var bob = new Monster(1000); //var不確定會是哪種型態時使用 ;new 某種型態(右邊才會賦值給左邊)
string idx = "99"; //先隨便假設以便進入迴圈
while (idx != "0") { //當idx不為0時進入迴圈
idx = Console.ReadLine(); //輸入一個數值
bool a = bob.cost(); //消耗使用
if (a == true) { //當消耗到0以下宣告死亡
Console.WriteLine("You are die!");
break; //break:停止並跳出這個迴圈
}
switch (idx) { //設計數字需做出的對應方法
case "0": break;
case "1": bob.Eat(400); break;
case "2": bob.Show(); break ;
case "3": break;
}
bob.Show(); //顯示飢餓值
}
}
}
}
```