接下來的內容是整個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 }