switch..case

switch..case ก็เป็นการเขียน if clause แบบหนึ่งที่ง่ายขึ้น มีรูปแบบ syntax ดังนี้

switch(<expression>) {
    case <value> : <statement>
    case <value> : <statement>
    case <value> : <statement>
    ..........................
    [default : <statement>]
}
ตรง expression นั้นจะเป็นตัวแปร หรือ method ใด ๆ ก็ได้
โดย default นั้นเปรียบเสมือน else ... ซึ่งจะเป็น option ที่จะมีก็ได้ ไม่มีก็ได้
ลองมาดูตัวอย่างเพื่อความเข้าใจดีกว่า
int grade = Int32.Parse(Console.ReadLine());
string gradeString;

switch(grade) {
    case 4 : gradeString = "A";
    case 3 : gradeString = "B";
    case 2 : gradeString = "C";
    case 1 : gradeString = "D";
    case 0 : gradeString = "F";
    default : gradeString = "Incorrect number";
}

Console.WriteLine(gradeString);
ก็ควรจะมีผลเหมือนกับ
int grade = Int32.Parse(Console.ReadLine());
string gradeString;

if(grade == 4) {
    gradeString = "A";
} else if(grade == 3) {
    gradeString = "B";
} else if(grade == 2) {
    gradeString = "C";
} else if(grade == 1) {
    gradeString = "D";
} else if(grade == 0) {
    gradeString = "F";
} else {
    gradeString = "Incorrect number";
}

Console.WriteLine(gradeString);
ถ้านำตัวอย่างนี้ไปรันในภาษาอย่าง C,C++ หรือ Java แล้วสมมุติว่าใส่ input เป็น 3 ผลที่ได้คือ
B
C
D
F
Incorrect number
นั่นเพราะว่า ถ้า case ใดตรงกับค่าใน switch expression มันก็จะทำงานที่ case อื่น ๆ ข้างล่างทั้งหมดเลย ดังนั้น C# จึงแก้ความสับสนนี้ โดยการให้ code ด้านบนนั้นไม่ผ่านการ compile

วิธีแก้ปัญหากรณีนี้ก็คือใส่ประโยค break; ลงไปในแต่ละ case ดังนี้

int grade = Int32.Parse(Console.ReadLine());
string gradeString;

switch(grade) {
    case 4 :
        gradeString = "A";
        break;
    case 3 :
        gradeString = "B";
        break;
    case 2 :
        gradeString = "C";
        break;
    case 1 :
        gradeString = "D";
        break;
    case 0 :
        gradeString = "F";
        break;
    default :
        gradeString = "Incorrect number";
}

Console.WriteLine(gradeString);
คนที่เคยเขียน pascal มาแล้วคงสงสัย ว่าทำไมต้องใส่ break ด้วยล่ะ ทำไมไม่ทำ ประโยค switch..case ให้มันทำงานแค่ case เดียวแล้วออกเลย นั่นเพราะมันมีประโยชน์บ้างครับ ลองมาดูกัน
int grade = Int32.Parse(Console.ReadLine());
string message;

switch(grade) {
    case 4 :
    case 3 :
        message = "You 're good";
        break;
    case 2 :
    case 1 :
        message = "You should pratice more";
        break;
    case 0 :
        message = "try try and try";
        break;
    default :
        message = "Incorrect number";
}

Console.WriteLine(message);
นั่นคือถ้าได้เกรด 4 หรือเกรด 3 message ก็จะเป็นข้อความว่า You 're good แต่ถ้าได้ 2 หรือ 1 ก็จะเป็นข้อความว่า You should pratice more

*ในภาษาอื่น ๆ นั้นตรง expression นั้นต้องเป็น integral type เท่านั้น นั่นคือจะต้องเป็นพวก int short,... หรือ char แต่ว่าใน C# นั้นสามารถใส่ expression เป็น string ได้ด้วย

string gradeString = Int32.Parse(Console.ReadLine());
string message;

switch(gradeString.ToUpper()) {
    case "A" :
        message = "Excellent";
        break;
    case "B" :
        message = "Good";
        break;
    case "C" :
        message = "Cool";
        break;
    case "D" :
        message = "Try";
        break;
    case "F" :
        message = "Get out!!";
        break;
    default :
        message = "Incorrect grade";
}

Console.WriteLine(message);

Formatting String

คุ้น ๆ code ด้านล่างนี้ใช่มั้ยครับ

Console.WriteLine("Hi {0}\nYou 're {1} years old", name, age);
มันมาจาก tutorial ตอนที่ 1 เป็นสไตล์การเขียนแบบ C ครับ ถ้าเป็นใน C ก็คงเป็นอย่างนี้
printf("Hi %s\nYou 're %s years old\n", name, age);
โดย %s บอกว่าให้เอา string มาใส่ตรงนี้นะ(s คือ string ถ้าเป็น int ก็จะเป็น %d, float ก็ %f, char ก็ %c)

การเขียนอย่างนี้ไม่ได้ช่วยให้การอ่านประโยคนั้นต่อเนื่องเพียงอย่างเดียว แต่มันยังสามารถจะ format ได้อีกด้วย ลองดูตัวอย่างกัน

Console.WriteLine("{0,5}{1,5}", 123, 456);     // Right-aligned
Console.WriteLine("{0,-5}{1,-5}", 123, 456);   // Left-aligned
ผลลัพธ์
  123  456
123  456
อันนี้คือการจัดชิดซ้ายชิดขวา โดยการระบุความกว้าง(จำนวนตัวอักษร)ลงไป
ถ้าเป็น C จะเขียนอย่างนี้ (ใน C ถ้าจะขึ้นบรรทัดใหม่ ต้องใส่ '\n' เองเสมอ)
printf("%5d%5d\n", 123, 456);     // Right-aligned
printf("%-5d%-5d\n", 123, 456);   // Left-aligned
ถ้าเป็น Pascal
writeln(123:5, 456:5); { Right-aligned }
writeln(123:-5, 456:-5); { Left-aligned }
ประโยชน์ที่เห็นได้จากการจัดความกว้างก็เช่นการโชว์ข้อมูลเป็นบล็อก ๆ ให้ตรงกัน เพื่อความสวยงาม
Console.WriteLine("{0,-10}{1,-3}", "Name","Salary");
Console.WriteLine("----------------");
Console.WriteLine("{0,-10}{1,6}", "Bill", 123456);
Console.WriteLine("{0,-10}{1,6}", "Polly", 7890);
Name      Salary
----------------
Bill      123456
Polly       7890

นอกจากการกำหนดความกว้างแล้ว เรายังกำหนดรูปแบบได้อีกด้วย โดยการใส่ :(colon) แล้วตามด้วยตัวอักษรลงไปหลังตัวเลขระบุตำแหน่ง ดังนี้

Character ความหมาย
C หรือ c Currency(เงิน)
D หรือ d Decimal(แปลว่าเลขฐาน 10 นะ อย่าสับสนกับ ตัวแปรประเภท decimal)
E หรือ e Exponent(ระบบวิทยาศาสตร์)
Fหรือ f Floating poing(ทศนิยม)
G หรือ g General
N หรือ n Number(เหมือน F แต่จะใส่ comma คั่นตัวเลขทุก ๆ 3 หลัก
P หรือ p Percentage
R หรือ r Round-trip ใช้กับ floating-point value เท่านั้น โดยจะ guaruntee ว่าค่าที่ถูกเปลี่ยนไปจะมีค่าเท่ากับตัวเดิม
X หรือ x Hexadecimal(เลขฐาน 16)
int i = 123456;
Console.WriteLine("{0:C}", i);
Console.WriteLine("{0:D}", i);
Console.WriteLine("{0:E}", i);
Console.WriteLine("{0:F}", i);
Console.WriteLine("{0:G}", i);
Console.WriteLine("{0:N}", i);
Console.WriteLine("{0:P}", i);
Console.WriteLine("{0:X}", i);
฿123,456.00
123456
1.234560E+005
123456.00
123456
123,456.00
12,345,600.00 %
1E240

Console.WriteLine("{0:D6} {1:D4}", 123, 456);
000123 0456

เราสามารถรวมการจัดความกว้างและฟอร์แม็ตไปพร้อม ๆ กันได้ดังนี้

Console.WriteLine("{0,-10:D6}{1,-10:F4}", 123, 456.0000);
Console.WriteLine("{0,-12:N2}{1,9:X4}", 1234567, 240);
000123     456.0000
1,234,567.00   00F0

อ้อ ลองมาดูความแตกต่างของ F กับ R กันตรงนี้เลยครับ

double d = 1.2345678901234567890;
Console.WriteLine("{0:F16}", d);
Console.WriteLine("{0:R16}", d);
1.2345678901234600
1.2345678901234567
ตาม definition ของ R เป็นอย่างนี้ครับ
The R (round-trip) format works only with floating-point values: the value is first tested using the general format, with 15 spaces of precision for a Double and seven spaces of precision for a Single. If the value is successfully parsed back to the same numeric value, its formatted using the general format specifier. On the other hand, if the value isnt successfully parsed back to the same numeric value, the value is formatted using 17 digits of precision for a Double and nine digits of precision for a Single. Although a precision specifier can be appended to the round-trip format specifier, its ignored.
อย่าสนใจเลย แปะไว้งั้น ๆ แหละ

การจัด format สามารถทำได้ตอนสร้าง string ขึ้นมาตัวหนึ่งเลยก็ได้ ดังนี้ โดยใช้ method Format ของคลาส String ดังนี้

string s = String.Format("{0:D3}", 123);

Comment

Comment:

Tweet

เทนต่ำๆๆๆ

#68 By 123 (182.52.172.201|182.52.172.201) on 2015-09-12 09:32

what the fuck

#67 By 987654321 (61.7.175.181|61.7.175.181) on 2015-09-12 09:31

จะเล่นพ่อแม่กันทำไม เรื่องนิดๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆ
ๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆ
ๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆ
ๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆ

#66 By 123456789 (118.175.31.234|118.175.31.234) on 2015-09-12 09:26

#65 By 123 (118.175.31.234|118.175.31.234) on 2015-09-12 09:24

เม้งงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงงembarrassed embarrassed embarrassed embarrassed embarrassed double wink double wink double wink double wink

#64 By (61.7.175.181|61.7.175.181) on 2015-09-12 09:23

ควยบันฑิต

#63 By (182.52.172.201|182.52.172.201) on 2015-09-12 09:23

นกๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆ

#62 By birdbirdbird (61.7.175.181|61.7.175.181) on 2015-09-12 09:18

หมดเวลา

#61 By 11 (61.7.175.181|61.7.175.181) on 2015-09-12 08:50

#60 By ชัย กิตติพัน (61.7.175.181|61.7.175.181) on 2015-09-12 08:50

เรื่องนิสสสสๆหน่อย จบได้แล้ว จากนิสสส

#59 By นิสสสสส (182.52.172.201|182.52.172.201) on 2015-09-12 08:49

ใครอ่านพ่องตาย ไอสลัดผัก

#58 By (61.7.175.181|61.7.175.181) on 2015-09-12 08:49

ควยสมชายๆๆๆๆๆๆๆๆๆๆๆๆ ขายตูดๆๆๆๆๆๆๆๆ เม้งๆๆๆๆ อ่อๆๆๆๆๆๆ

#57 By (182.52.172.201|182.52.172.201) on 2015-09-12 08:48

เเมงโม้ บวก 10 เย้ๆๆ สายชมๆ

#56 By (118.175.31.234|118.175.31.234) on 2015-09-12 08:48

น้องบัวรัวลิ้น มีหน้าสองเเล้วอ่อ เย้ๆๆๆ

#55 By (118.175.31.234|118.175.31.234) on 2015-09-12 08:47

ขายเปียโนยังค่ะ

#54 By น้องออ ของเทน (61.7.175.181|61.7.175.181) on 2015-09-12 08:47

ผมชอบดูดขี้ผู้ชายมากครับ    มันลื่นคอ

#53 By นายพล คุ้มพะเนียด ชอบเลียตูด (61.7.175.181|61.7.175.181) on 2015-09-12 08:47

กระผมชอบธรรมะค่ะ

#52 By สุเทน คุ้มพะเนียด (182.52.172.201|182.52.172.201) on 2015-09-12 08:45

50 คืนหนึ่ง

#51 By อมรัตนประกาศขายตัว (118.175.31.234|118.175.31.234) on 2015-09-12 08:45

หมู อ๊ดดดๆๆ เราเด็กบ้าๆ เราเด็กเลี้ยงหมู

#50 By (118.175.31.234|118.175.31.234) on 2015-09-12 08:45

กรรนิกาาาาา เม้งๆๆ ออๆๆๆๆ นัท ทายากangry smile

#48 By (118.175.31.234|118.175.31.234) on 2015-09-12 08:44

กรรนิกาาาาา เม้งๆๆ ออๆๆๆๆ นัท ทายากangry smile

#49 By (118.175.31.234|118.175.31.234) on 2015-09-12 08:44

กรรนิกาาาาา เม้งๆๆ ออๆๆๆๆ นัท ทายากangry smile

#47 By (118.175.31.234|118.175.31.234) on 2015-09-12 08:44

กรรนิกาาาาา เม้งๆๆ ออๆๆๆๆ นัท ทายากangry smile

#46 By (118.175.31.234|118.175.31.234) on 2015-09-12 08:44

เหก้ยเดือนนี้เดือนไรนะ อ๋ออ เดือนกันยาไงไอสัส

#45 By นายสไว ไหวป่าววะ (61.7.175.181|61.7.175.181) on 2015-09-12 08:44

27อะเจอได้นะ ได้ข่าวว่าห้าว

#44 By (182.52.172.201|182.52.172.201) on 2015-09-12 08:43

เกษม ขายผัก

#43 By (61.7.175.181|61.7.175.181) on 2015-09-12 08:43

ควยไรณัฐกานต์ 
จากน้องสมชาย

#42 By (118.175.31.234|118.175.31.234) on 2015-09-12 08:43

เม้งอ่อ

#41 By P (61.7.175.181|61.7.175.181) on 2015-09-12 08:42

กระผมนาย สมชายขายตูด ดูดปุ้น
sad smile sad smile sad smile sad smile sad smile sad smile

#40 By (182.52.172.201|182.52.172.201) on 2015-09-12 08:42

เพลงผมเพราะมั้ยครับ ไอสัสผมวสันต์เอง

#39 By วสันต์ โชติกุล (61.7.175.181|61.7.175.181) on 2015-09-12 08:41

ควยเม้งๆๆๆๆๆ ควยยยยย ให้หมด เลยสุเทน สุคน

#38 By (61.7.175.181|61.7.175.181) on 2015-09-12 08:40

มาทำมัย รร มาเเล้วไม่เรียน
ควยควคยวคยควคยวคยคคว รด รดร ดรด
รด รด รด รด รด ร ด รด รด รด

#37 By swtich case คืออัลลัย (118.175.31.234|118.175.31.234) on 2015-09-12 08:38

#36 By หะ้หะพ (183.89.72.82|183.89.72.82) on 2015-08-14 16:57

Maintain the great work and bringing in the crowd!

Feel free to surf to my web site :: <a href="http://hostingcode.org/">im a scammer</a>

#35 By (5.11.144.111|212.129.37.98, 5.11.144.111) on 2014-07-24 08:57

#34 By (114.33.130.199|121.205.212.150, 114.33.130.199) on 2014-06-27 07:24

fantastic articles on how to care for college research paper hobby setup. I didn't know you could do this but you recognize something new everyday.

#33 By help writing essay (31.184.238.73) on 2013-11-12 04:01

You don’t need to mull over which company to choose for buying resume at all. Expert resume writers are are just a click away. Check out Prime-Resume company (prime-resume.com) with the aim to view resume templates or buy resume. Be sure that you will find premium resume services.

#32 By over here (103.7.57.18|46.161.41.16) on 2013-03-15 17:30

When learners contact Best Essay Sites company (best-essay-sites.com), they will find custom essay review of superior quality.

#31 By this site (103.7.57.18|91.201.64.16) on 2012-12-09 14:43

You are evidently, a real master of thesis pdf referring to this post creating but if you like to opt for the thesis writing service "topthesis.com", I would tell you to find the greates one.

#30 By thesis (103.7.57.18|31.184.238.21) on 2012-06-29 16:43

test

#29 By eee (202.28.49.130) on 2012-03-28 11:16

ขอ ถาม จะ ทำให้ switch อ่านค่า double ได้ไหม ครับ พอ ดี ผม คิด เกรด แบบ a b+ b c+ c d+ d เเละ f นะครับ จะ ทำ ไก้ ไหม ครับ

#28 By surachart (110.164.187.83) on 2012-02-09 18:17

I do not like to write. But, my tutor admits only very good papers. I do not know if it is reasonable to buy an Original essay. Can it be strange if I submit custom written papers?

#27 By Buy Term Papers Online (31.184.238.21) on 2012-01-09 18:38

I am required to accomplish my essay paper immediately. Probably I can place an Essays Order. I cannot find another pathway.

#26 By Buy Research Paper (31.184.238.21) on 2012-01-09 18:35

All people deserve very good life and home loans or short term loan will make it much better. Because people's freedom relies on money state.

#25 By home loans (91.212.226.136) on 2011-12-21 10:41

ขอบคุณครับ เป็นประโยชน์มากเลย

#24 By jackyxman (180.180.124.105) on 2011-12-07 11:09

โพสต์ที่น่าสนใจมากผมชอบเว็บไซต์ของคุณให้ขึ้นโพสต์ที่ดี

#23 By buy thesis (110.37.57.171) on 2011-07-11 21:56

Letter Grade Advance
Specification:
Write a program to change a numeric grade (4,3.5,3,…) to a letter grade (A,B+,B,…). (Use switch)
Number Letter
4 A
3.5 B+
3 B
2.5 C+
2 C
1.5 D+
1 D
0 F
Input
A numeric grade.
Example
3.5
Output
A letter grade
Example
B+
ช่วยหน่อยครับ

#22 By saramatajaja (202.28.180.202) on 2011-06-28 11:26

The blog is quite amazing and wonderful and will help the students to understand the real and correct meaning of the structure, beautiful work.

#21 By Buy Thesis (119.155.10.42) on 2011-06-17 19:17

tongue angry smile embarrassed wink sad smile

#20 By 55 (58.9.208.197) on 2011-02-07 13:51

it's good to see this information in your post, i was looking the same but there was not any proper resource, thanx now i have the link which i was looking for my research.

#19 By Dissertation Writing (116.71.42.137) on 2011-01-27 19:53