C# Tutorial ตอนที่ 4 (if clause)
posted on 07 Jun 2005 01:20 by tidno1 in csharp-and-dotnetช่วงนี้เนื้อหาอาจจะสั้นหน่อย และอาจจะเขียนช้าบ้าง เพราะตอนนี้เปิดเทอมแล้ว คงต้องแบ่งเวลาไปเรียนพอควร(จริงเรอะ)
Control Statement
โดยปกติแล้วโปรแกรมที่เราเขียนจะมีลำดับการทำงานจากบนไปล่าง ทีละคำสั่ง จบหนึ่งคำสั่งถึงไปทำอีกคำสั่งหนึ่ง แต่ถ้าเราต้องการให้มันทำงานเป็นเงื่อนไข คือต้องตัดสินใจว่าจะทำคำสั่งนึงหรือไม่ โดยขึ้นกับอีกคำสั่งนึง เราก็จะต้องใช้ control statement จำพวก if..else ลองอ่านประโยคข้างล่างดู
string s = Console.ReadLine();
int x = Int32.Parse(s);
if(x < 0)
x = -x;
Console.WriteLine("Non-negative number of your input is {0}", x);
สังเกตนะครับ ในภาษานี้ไม่เหมือนภาษาอื่นตรงที่ไม่มีคำว่า then หลัง condition เพราะว่าตรง condition นั้นมี '(' และ ')' ครอบอยู่(ต้องใส่ทุกครั้งนะครับ)
')' โดยวงเล็บปิดจะเป็นตัวบอกว่าจบ condition แล้ว และเริ่ม statement ที่จะต้องทำงานเมื่อถูกเงื่อนไข และถ้าเราต้องการให้มีการ execute statement หลาย ๆ statement ในเงื่อนไขเดียว เราต้องใช้เครื่องหมาย '{' และ '}' (วงเล็บปีกกา) ครอบกลุ่มคำสั่งเหล่านั้นไว้ เช่น
// statement_1
// statement_2
// ...
// statement_n
}
ลองมาดูอีกแบบกันดีกว่า
DayOfWeek thisDay = dtToday.DayOfWeek;
if((thisDay == DayOfWeek.Sunday) || (thisDay == DayOfWeek.Saturday)) {
Console.WriteLine("Today is weekend");
} else {
Console.WriteLine("Today is weekday");
}
Nested if คือ if else if else if แบบต่อเนื่องกันนั่นแหละครับ
string s = Console.ReadLine();
int x = Int32.Parse(s);
if(x < 0) {
Console.WriteLine("{0} is negative number", x);
} else if(x > 0) {
Console.WriteLine("{0} is positive number", x);
} else {
Console.WriteLine("{0} is zero", x);
}
Dangling else
ภาษาหลาย ๆ ภาษาที่ไม่มีคำสั่ง end if (หรือ endif) มักจะเกิดปัญหาการตีความ ประโยคประมาณนี้
|
แบบที่ 1
if(cond1)
if(cond2) stmt1; else stmt2; |
หรือ |
แบบที่ 2
if(cond1)
if(cond2) stmt1; else stmt2; |
รักแท้ยังแพ้ความใกล้ชิด : else แท้ ๆ ก็รัก if ตัวที่อยู่ใกล้ที่สุด
เพราะฉะนั้นแบบที่สอง ถ.
ถ.
ถ.
ถ.
ถ. ถูกต้องนะค้าบ
- เขียนโปรแกรมตัดเกรด(โจทย์คลาสสิคสุด ๆ) โดยให้รับ input เป็นตัวเลขจำนวนจริง โดยมีเกณฑ์ดังนี้ [0,50) ได้ F, [50,60) ได้ D, [60,70) ได้ C, [70,80) ได้ B, [80,100] ได้ A นอกนั้นให้แจ้งผู้ใช้ด้วยว่าใส่ตัวเลขเกินช่วง ผลลัพธ์ให้ WriteLine ออกจอละกัน
- รับตัวเลขจำนวนจริงเข้ามา 1 ตัว แล้วตอบว่าเลขนั้นเป็นจำนวนเต็มรึเปล่า(คือ จะ 50.0 หรือ 50 ก็เป็นจำนวนเต็ม แต่ 21.1 ไม่ใช่) หากไม่ใช่จำนวนเต็ม ให้บอกด้วยว่าต้อง เพิ่มหรือลดอีกน้อยที่สุดเท่าไรเพื่อทำให้เป็นจำนวนเต็ม เช่น 21.1 ต้องลดอีก 0.1 ไม่ใช่เพิ่มอีก 0.9

#1 By [M]och on 2005-06-07 01:55