接下來的內容是整個C#學習的脈絡,它將各個知識點串聯了起來,是整個C#的重點,所以篇幅較長。
首先,我們類比一下PLC和C#執行代碼的方式,其實不難發現都是順序掃描,以Main為程序入口,從上到下一行一行執行。這屬於順序結構。下面我們看看已下幾種結構
(1)分支結構:if if-else
(2)選擇結構:if-else-if switch-case
(3)循環結構:while do-while for foreach
首先先分享分支結構的用法
if語句
語法:
if(判斷條件)
{
要執行的代碼;
}
判斷條件:一般為關系表達式或者bool類型的值。
執行過程:程序運行到if處,首先判斷判斷條件,若為true則執行{}中的程序,如果返回false,則繼續向下執行。
即先判斷在執行。
if else語句
語法:
if(判斷條件)
{
執行代碼1;
}
else
{
執行代碼2;
}
執行過程:程序執行到if處,首先判斷判斷條件是否誠意,返回true,則執行代碼1,否則執行代碼2。用於兩種情況的判斷。
注意:else永遠和離他最近的那個if配對。
這里我們還要去提到一個if-else的一個簡化版用法,若語法條件不是很復雜可以這樣使用:
(表達式)?(result1):(result2)
if else-if語句
作用:用來處理多條件的區間的判斷。
語法:
if(判斷條件1)
{
要執行的語句1;
}
else if(判斷條件2)
{
要執行的語句2;
}
else if(判斷條件3)
{
要執行的語句3;
}
else
{
要執行的語句4;
}
.....
執行過程:程序首先判斷判斷條件1,條件成立,執行語句1,否則執行判斷條件2,成立跳出,否則繼續執行語句3.如果都不成立則執行最后else語句。(else語句可以省略)
所以總結一下:if處理一種情況,if-else處理兩種情況,if else-if處理多種情況。
try-catch異常捕獲
問題引出:語法上沒有錯誤,在程序運行過程當中,由於某些原因程序出現了錯誤,不能在正常的運行。
下面我們看一段代碼:
1 Console.WriteLine("請輸入一個數字"); 2 int number = Convert.ToInt32(Console.ReadLine()); 3 4 Console.WriteLine(number*2); 5 Console.ReadKey();
我們正常輸入int類型數字時,是沒有問題的,但是我們呢要是輸入類似“123ab”這樣的數字,系統就會拋異常,程序停止運行。這時,
若想你的程序變得堅強,就會用到try-catch進行異常捕獲。
就是哪里可能會出問題就將他try起來。
語法:
try
{
可能會出現異常的代碼;
}
catch
{
出現異常后要執行的代碼;
}
執行過程:如果try中的代碼沒有出現異常,那么catch中的代碼就不會執行。
更改后的代碼如下:
1 int number = 0; 2 Console.WriteLine("請輸入一個數字"); 3 try 4 { 5 int number = Convert.ToInt32(Console.ReadLine()); 6 Console.WriteLine(number*2); 7 } 8 catch 9 { 10 Console.WriteLine("輸入的內容不能轉換成數字"); 11 } 12 Console.ReadKey();
這里要注意變量的作用域,變量的作用域就是你能使用到這個變量的范圍,一般是從聲明他的那個括號開始到那個括號對應的括號結束。
注意:try-catch之間不允許有代碼,要緊密相連。
下面看這樣一個練習:
李四的年終工作評定,若為A,工資漲500,為B,工資漲200,為C工資不變,若為D工資降200,若為E,工資降500.原工資為5000
要求輸入李四評級,然后顯示李四來年的工資。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 草稿 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 double salary = 5000; 14 Console.WriteLine("請輸入對李四的年終評定"); 15 string level = Console.ReadLine(); 16 if (level=="A") 17 { 18 salary += 500; 19 } 20 else if (level=="B") 21 { 22 salary += 200; 23 } 24 else if (level == "C") 25 { 26 salary += 0; 27 } 28 else if (level == "D") 29 { 30 salary -= 200; 31 } 32 else if (level == "E") 33 { 34 salary -= 500; 35 } 36 else 37 { 38 Console.WriteLine("輸入有誤程序退出"); 39 } 40 Console.WriteLine("李四來年的工資是{0}",salary); 41 Console.ReadKey(); 42 } 43 } 44 }
但是以上代碼會有問題,就是當你輸入的為ABCDE以外的字母時,會發生一下問題:
也就是在執行完else代碼后 最后的Console.WriteLine("李四來年的工資是{0}",salary);不應該輸出為了解決這個問題,我們可以用以下方法解決。也就是用一個標志位。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 草稿 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 bool b = true; 14 double salary = 5000; 15 Console.WriteLine("請輸入對李四的年終評定"); 16 string level = Console.ReadLine(); 17 if (level=="A") 18 { 19 salary += 500; 20 } 21 else if (level=="B") 22 { 23 salary += 200; 24 } 25 else if (level == "C") 26 { 27 salary += 0; 28 } 29 else if (level == "D") 30 { 31 salary -= 200; 32 } 33 else if (level == "E") 34 { 35 salary -= 500; 36 } 37 else 38 { 39 Console.WriteLine("輸入有誤程序退出"); 40 b = false; 41 } 42 if (b) 43 { 44 Console.WriteLine("李四來年的工資是{0}", salary); 45 } 46 47 Console.ReadKey(); 48 } 49 } 50 }