C語言文件的讀入與寫入及C#基礎函數學習[圖]
學了一學期的C語言,還不怎麼會使用指針,文件的讀入和寫入也不能很順利的寫出來,提及來好慚愧。碰巧今天朋友讓我幫他編寫一個C語言程序,對他數模要用到的大量數據求平均值(天天不一樣時刻對某一物理量進行檢測,持續幾十天,求那些時刻測得的物理量的平均值)。代碼很簡單,關鍵是要掌握怎樣對文件進行讀入和寫入(固然對於菜雞的我來講,懶惰讓我在大一沒有好好學習,正好趁着這個契機把文件的基本的操做學會:))
分模塊來編寫仍是很重要的,可使程序看起來簡潔明瞭。寫了兩個函數:從data文件中讀入數據複製給二維數組,和把運算的平均值結果寫入到result文件中。
對於新手來講,要注意代碼中二維數組的函數調用。void Readfromfile(double flow[][N]) N不能忘記了,若是沒寫就等着報錯吧
要注意的一點是你能夠把txt文件存入到C語言的project裏,在文件夾裏的命名爲:如代碼中的result,不用在後面加txt,txt只是一種文本類型,在讀入函數中才要寫上來識別? 另外寫入的txt文件能夠不用先建立,程序會自動生成的。html
C# 基礎學習2(內聯函數,類型約束,try catch,vs調試)
調用函數須要CPU執行參數壓棧、寄存器保存與恢復、跳轉指令等操做,開銷比較大,高頻繁的調用函數對性能有影響.
C#不支持inline,可是JIT支持自動inline,即將IL轉成真正機器碼時,會「自動」將某些函數進行inline展開,只是條件很是苛刻:
1)函數內部有循環語句、catch語句等複雜結構,都不作inline優化。
2)函數體比較長的不作inline優化,只有比較簡單的纔可能inline優化。(有人說IL不足32字節才作inline)
2)編譯成機器碼時,inline展開的代碼比函數調用更短的,必定作inline。
從上述可知:
1) property適合自動inline優化,沒必要擔憂property的性能比Field字段低,
2) 若是指望inline優化的函數,必定要寫得小,力爭編譯後的IL不超過32字節。
其實 是否作inline優化應該從調用的頻繁度考慮,而JIT沒法瞭解頻繁度,所以自動inline優化效果並不理想,網上許多人都討論過這點,但微軟就是不支持C#的inline,也許微軟認爲C++才須要關心性能,而C#關注快速開發,沒必要理會這些開銷吧。
2,類型約束
.NET支持的類型參數約束有如下6種:
where T : struct | T必須是一個結構類型,類型參數必須是值類型。
where T : class | T必須是一個Class類型,寫class,,結果是:必須是引用類型,string能夠,int不能夠
where T : new() | T必需要有一個無參構造函數,當與其餘約束一塊兒使用時,new() 約束必須最後指定。
where T : NameOfBaseClass | T必須繼承名爲NameOfBaseClass的類,寫明哪一個類
where T : NameOfInterface | T必須實現名爲NameOfInterface的接口
where T:U 爲 T 提供的類型參數必須是爲 U 提供的參數或派生自爲 U 提供的參數。
類型約束有什麼用:防止類被不正確的使用,維護框架結構,建立合理的架構。
寫法以下:
public class ReceiveTest : MonoBehaviour
{
private void Awake()
{
Test<TestApple> t = new Test<TestApple>(new TestApple());
}
}
public class TestFruit
{
public void Fun(){ Debug.Log("i am TestFruit Fun"); }
}
public class TestApple:TestFruit { }
public class Test<T> where T : TestFruit //類型約束,T只能是繼承自TestFruit的類
{
public Test(T t)
{
t.Fun();
}
}
3,try catch捕獲異常
在本身不可控的地方捕獲異常。好比文件讀取,網絡鏈接,操做外部設備等。用異常最好指定異常的類型,如IOException, WebException等等,而不要只用一個Exception基類。格列佛遊記讀書筆記(http://www.simayi.net/dushubiji/964.html)心得體會,異常捕獲是調試手段,用於發現發生異常的位置和緣由,不能把異常捕獲看成程序邏輯,徹底能夠避免的異常絕對不能用try cacth包圍。
操做以下:
try{
將預見可能引起異常的代碼包含在try語句塊中。通常放主幹代碼。
}catch (聲明異常類型 異常變量){
這裏處理異常,用這語句塊報出異常的代碼是不會讓系統崩掉的,通常是輸出錯誤類型。
}finally{
無論程序出錯仍是正常運行這個finally是必定會執行的,不須要的時候這個finally塊能夠不寫。
}
若是程序出錯就不會到這裏,這裏只有當程序正常的時候纔會走這裏。
4,vs調試
逐過程,按過程來,跳過函數,把函數當成一條語句。若是循環(foreach,for,while)在函數內,則逐過程不會進入,直接跳過函數。
逐語句,表示一條一條語句走,進入函數。
跳出,直接跳出類,若是在循環裏,也是直接跳出,而且同時跳出該循環所在的函數。
基本操做:添加監視,添加條件。數組