คำสั่งเงื่อนไขในภาษาซี: If, Else, If ซ้อน พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

คำสั่งเงื่อนไขในภาษาซีควบคุมการไหลของโปรแกรมโดยการเรียกใช้บล็อกโค้ดก็ต่อเมื่อเงื่อนไขที่ทดสอบมีค่าเป็นจริงเท่านั้น ซึ่งช่วยให้สามารถตัดสินใจได้ผ่านโครงสร้าง if, if-else, nested และ else-if ladder

  • 🔤 เงื่อนไข if: คำสั่ง if จะทำงานก็ต่อเมื่อเงื่อนไขมีค่าเป็นจริงที่ไม่ใช่ศูนย์เท่านั้น ในขณะที่ศูนย์หมายถึงเท็จ
  • 🔀 ถ้า-มิฉะนั้น: โครงสร้าง if-else เพิ่มเงื่อนไขเท็จ โดยจะรันบล็อกหนึ่งเมื่อเงื่อนไขเป็นจริง และรันอีกบล็อกหนึ่งเมื่อเงื่อนไขเป็นเท็จ
  • 🇧🇷 ตัวดำเนินการเชิงสัมพันธ์: ตัวดำเนินการหกตัว (<, <=, >, >=, ==, !=) ใช้สร้างนิพจน์บูลีนที่ใช้ทดสอบเงื่อนไขแต่ละข้อ
  • 🪜 ลำดับขั้นเงื่อนไขอื่น: โครงสร้าง else-if แบบซ้อนกันจะตรวจสอบนิพจน์หลายรายการจากบนลงล่าง และจะเรียกใช้เงื่อนไขที่เป็นจริงเงื่อนไขแรก หรือเรียกใช้เงื่อนไข else ตามค่าเริ่มต้น
  • โอเปอเรเตอร์ไตรภาค: นิพจน์เงื่อนไข ?: เขียนคำสั่ง if-else ที่กระชับและส่งคืนค่าใดค่าหนึ่งจากสองค่าในบรรทัดเดียว
  • 🤖 ความช่วยเหลือจากเอไอ: GitHub Copilot จะร่างและตรวจสอบตรรกะ if-else ระบุวงเล็บที่ขาดหายไป และแนะนำเงื่อนไขที่ดูเรียบร้อยกว่า

คำสั่งเงื่อนไขในภาษาซี: IF, IF Else และ IF Else ซ้อนกัน

คำสั่งแบบมีเงื่อนไขในภาษา C คืออะไร?

คำสั่งเงื่อนไขในภาษาซีใช้สำหรับการตัดสินใจโดยอิงจากเงื่อนไข คำสั่งเงื่อนไขจะทำงานตามลำดับเมื่อไม่มีเงื่อนไขอื่นล้อมรอบ หากคุณใส่เงื่อนไขให้กับกลุ่มคำสั่ง การทำงานของโปรแกรมอาจเปลี่ยนแปลงไปตามผลลัพธ์ที่ได้จากเงื่อนไขนั้น กระบวนการนี้เรียกว่าการตัดสินใจในภาษาซี

แตกต่าง ลูปในภาษาซี โค้ดที่ทำซ้ำนั้น คำสั่งเงื่อนไขจะเลือกเส้นทางใดเส้นทางหนึ่ง

ในการเขียนโปรแกรม 'C' คำสั่งเงื่อนไขสามารถทำได้ด้วยความช่วยเหลือของโครงสร้างสองแบบต่อไปนี้:

  1. ถ้าคำสั่ง
  2. คำสั่ง if-else

นอกจากนี้ยังเรียกว่าเป็นการแตกแขนงเนื่องจากโปรแกรมจะตัดสินใจว่าคำสั่งใดที่จะดำเนินการตามเงื่อนไขที่ประเมิน

ถ้าคำสั่ง

มันเป็นหนึ่งในคำสั่งเงื่อนไขที่ทรงพลัง หากคำสั่งมีหน้าที่รับผิดชอบในการปรับเปลี่ยนขั้นตอนการทำงานของโปรแกรม ถ้าคำสั่งจะใช้โดยมีเงื่อนไขเสมอ เงื่อนไขจะได้รับการประเมินก่อนที่จะดำเนินการคำสั่งใดๆ ภายในเนื้อหาของ If ไวยากรณ์ของคำสั่ง if เป็นดังนี้:

 if (condition) 
     instruction;

เงื่อนไขประเมินเป็นจริงหรือเท็จ True จะเป็นค่าที่ไม่ใช่ศูนย์เสมอ และ false คือค่าที่มีศูนย์ คำสั่งอาจเป็นคำสั่งเดียวหรือบล็อคโค้ดที่ล้อมรอบด้วยเครื่องหมายปีกกา { }

โปรแกรมต่อไปนี้แสดงตัวอย่างการใช้โครงสร้าง if ในการเขียนโปรแกรม 'C':

#include<stdio.h>
int main()
{
	int num1=1;
	int num2=2;
	if(num1<num2)		//test-condition
	{
		printf("num1 is smaller than num2");
	}
	return 0;
}

Output:

num1 is smaller than num2

โปรแกรมด้านบนแสดงการใช้โครงสร้าง if เพื่อตรวจสอบความเท่าเทียมกันของตัวเลขสองตัว

ผังงานคำสั่ง if ในภาษา C

  1. ในโปรแกรมข้างต้น เราได้เตรียมใช้งานตัวแปรสองตัวด้วย num1, num2 โดยมีค่าเป็น 1, 2 ตามลำดับ
  2. จากนั้น เราได้ใช้ if กับนิพจน์ทดสอบเพื่อตรวจสอบว่าตัวเลขใดมีค่าน้อยที่สุดและตัวเลขใดมากที่สุด เราได้ใช้นิพจน์เชิงสัมพันธ์ใน if build เนื่องจากค่าของ num1 น้อยกว่า num2 เงื่อนไขจึงประเมินเป็นจริง
  3. ดังนั้นมันจะพิมพ์คำสั่งภายในบล็อกของ If หลังจากนั้นการควบคุมจะออกไปนอกบล็อกและโปรแกรมจะสิ้นสุดลงพร้อมกับผลลัพธ์ที่สำเร็จ

เชิงสัมพันธ์ Operaโปร

ภาษา C มีตัวดำเนินการเชิงสัมพันธ์หกตัวที่สามารถใช้ในการสร้างนิพจน์บูลีนเพื่อตัดสินใจและทดสอบเงื่อนไข ซึ่งจะส่งคืนค่าจริงหรือเท็จ:

  • < — น้อยกว่า
  • <= — น้อยกว่าหรือเท่ากับ
  • > — มากกว่า
  • >= — มากกว่าหรือเท่ากับ
  • == — เท่ากับ
  • != — ไม่เท่ากับ

โปรดสังเกตว่าการทดสอบแบบเท่ากัน (==) นั้นแตกต่างจากตัวดำเนินการกำหนดค่า (=) เนื่องจากเป็นหนึ่งในปัญหาที่พบบ่อยที่สุดที่โปรแกรมเมอร์ต้องเผชิญเนื่องจากสับสนระหว่างการทดสอบทั้งสอง

ตัวอย่างเช่น:

int x = 41;
x =x+ 1;
if (x == 42) {
   printf("You succeed!");}

Output:

 You succeed

โปรดทราบว่าเงื่อนไขที่ประเมินเป็นค่าที่ไม่ใช่ศูนย์จะถือว่าเป็นจริง

ตัวอย่างเช่น:

int present = 1;
if (present)
  printf("There is someone present in the classroom \n");

Output:

There is someone present in the classroom

คำสั่ง If-Else

ผังงานคำสั่ง If-Else ของ C

คำสั่ง if-else เป็นรูปแบบที่ขยายเพิ่มเติมจากคำสั่ง if รูปแบบทั่วไปของ if-else มีดังนี้:

if (test-expression)
{
    True block of statements
}
Else
{
    False block of statements
}
Statements;

ในโครงสร้างแบบนี้ ถ้าค่าของนิพจน์ทดสอบเป็นจริง บล็อกคำสั่งที่เป็นจริงจะถูกดำเนินการ ถ้าค่าของนิพจน์ทดสอบเป็นเท็จ บล็อกคำสั่งที่เป็นเท็จจะถูกดำเนินการ ไม่ว่ากรณีใดก็ตาม หลังจากดำเนินการเสร็จสิ้น การควบคุมจะถูกโอนไปยังคำสั่งที่ปรากฏอยู่นอกบล็อก If โดยอัตโนมัติ

โปรแกรมต่อไปนี้แสดงให้เห็นการใช้โครงสร้าง if-else:

เราจะเริ่มต้นตัวแปรด้วยค่าจำนวนหนึ่งและเขียนโปรแกรมเพื่อพิจารณาว่าค่านั้นน้อยกว่าสิบหรือมากกว่าสิบ

เริ่มกันเลย.

#include<stdio.h>
int main()
{
	int num=19;
	if(num<10)
	{
		printf("The value is less than 10");
	}
	else
	{
		printf("The value is greater than 10");
	}
	return 0;
}

Output:

The value is greater than 10

ตัวอย่างผลลัพธ์ของคำสั่ง if-else ในภาษา C

  1. เราได้เริ่มต้นตัวแปรด้วยค่า 19 แล้ว เราต้องค้นหาว่าตัวเลขนั้นมากกว่าหรือน้อยกว่า 10 โดยใช้โปรแกรม 'C' เมื่อต้องการทำเช่นนี้ เราได้ใช้โครงสร้าง if-else
  2. ที่นี่เราได้ระบุเงื่อนไข num<10 เนื่องจากเราต้องเปรียบเทียบค่าของเรากับ 10
  3. อย่างที่คุณเห็นบล็อกแรกจะเป็นบล็อกจริงเสมอ ซึ่งหมายความว่าหากค่าของนิพจน์ทดสอบเป็นจริง บล็อกแรกซึ่งก็คือ If จะถูกดำเนินการ
  4. บล็อกที่สองเป็นบล็อกอื่น บล็อกนี้มีคำสั่งที่จะถูกดำเนินการหากค่าของนิพจน์ทดสอบกลายเป็นเท็จ ในโปรแกรมของเรา ค่า num มากกว่าสิบ ดังนั้นเงื่อนไขการทดสอบจะกลายเป็นเท็จ และบล็อกอื่นจะถูกดำเนินการ ดังนั้นเอาต์พุตของเราจะมาจากบล็อกอื่นซึ่งก็คือ "ค่ามากกว่า 10" หลังจาก if-else โปรแกรมจะยุติการทำงานด้วยผลลัพธ์ที่สำเร็จ

ในการเขียนโปรแกรม 'C' เราสามารถใช้โครงสร้าง if-else หลายโครงสร้างภายในกันและกัน ซึ่งเรียกว่าการซ้อนคำสั่ง if-else

นิพจน์ตามเงื่อนไข

อีกวิธีหนึ่งในการแสดงคำสั่ง if-else คือการใช้ตัวดำเนินการ ?: ในนิพจน์เงื่อนไข ตัวดำเนินการ ?: จะมีเพียงคำสั่งเดียวที่เชื่อมโยงกับ if และ else

ตัวอย่างเช่น:

#include <stdio.h>
int main() {
  int y;
  int x = 2;
   y = (x >= 6) ?  6 : x;/* This is equivalent to:  if (x >= 5)    y = 5;  else    y = x; */
   printf("y =%d ",y);
  return 0;}

Output:

y =2

คำสั่ง If-else ที่ซ้อนกัน

เมื่อจำเป็นต้องมีชุดการตัดสินใจ ระบบจะใช้ if-else แบบซ้อนกัน การซ้อนหมายถึงการใช้โครงสร้าง if-else อันหนึ่งภายในอีกอันหนึ่ง

มาเขียนโปรแกรมเพื่อแสดงการใช้ if-else แบบซ้อนกัน

#include<stdio.h>
int main()
{
	int num=1;
	if(num<10)
	{
		if(num==1)
		{
			printf("The value is:%d\n",num);
		}
		else
		{
			printf("The value is greater than 1");
		}
	}
	else
	{
		printf("The value is greater than 10");
	}
	return 0;
}

Output:

The value is:1

โปรแกรมด้านบนจะตรวจสอบว่าตัวเลขน้อยกว่าหรือมากกว่า 10 และพิมพ์ผลลัพธ์โดยใช้โครงสร้าง if-else ที่ซ้อนกัน

คำสั่ง if-else ซ้อนกันในภาษา C

  1. ประการแรก เราได้ประกาศตัวแปร num ที่มีค่าเป็น 1 จากนั้นเราจึงใช้โครงสร้าง if-else
  2. ในคำสั่ง if-else ภายนอก เงื่อนไขที่กำหนดจะตรวจสอบว่าตัวเลขนั้นน้อยกว่า 10 หรือไม่ ถ้าเงื่อนไขเป็นจริง คำสั่งภายในจึงจะถูกดำเนินการ ในกรณีนี้ เงื่อนไขเป็นจริง ดังนั้นคำสั่งภายในจึงถูกประมวลผล
  3. ในบล็อกด้านใน เรามีเงื่อนไขอีกครั้งที่ตรวจสอบว่าตัวแปรของเรามีค่าเป็น 1 หรือไม่ เมื่อเงื่อนไขเป็นจริง ระบบจะประมวลผลบล็อก If มิฉะนั้นจะประมวลผลบล็อก else ในกรณีนี้ เงื่อนไขเป็นจริง ดังนั้นบล็อก If จึงถูกดำเนินการและค่าจะถูกพิมพ์ลงบนหน้าจอแสดงผล
  4. โปรแกรมข้างต้นจะพิมพ์ค่าของตัวแปรและจบการทำงานด้วยข้อความว่าสำเร็จ

ลองเปลี่ยนค่าของ ตัวแปร ดูว่าโปรแกรมทำงานอย่างไร

หมายเหตุ: ในคำสั่ง if-else ที่ซ้อนกัน เราต้องระมัดระวังเรื่องการเว้นวรรค เพราะมีโครงสร้าง if-else หลายชั้นเกี่ยวข้องอยู่ ทำให้ยากที่จะแยกแยะแต่ละโครงสร้างได้ การเว้นวรรคที่ถูกต้องจะช่วยให้อ่านโปรแกรมได้ง่ายขึ้น

คำสั่ง Else-if ที่ซ้อนกัน

โครงสร้าง Else-if แบบซ้อนกันในภาษา C

Nested else-if ถูกใช้เมื่อจำเป็นต้องมีการตัดสินใจแบบหลายเส้นทาง

ไวยากรณ์ทั่วไปของวิธีสร้างแลดเดอร์ else-if ในการเขียนโปรแกรม 'C' มีดังนี้:

 if (test - expression 1) {
    statement1;
} else if (test - expression 2) {
    Statement2;
} else if (test - expression 3) {
    Statement3;
} else if (test - expression n) {
    Statement n;
} else {
    default;
}
Statement x;

โครงสร้างประเภทนี้เรียกว่า "บันไดเอ้ก" (else-if ladder) เนื่องจากมีลักษณะคล้ายบันได จึงเรียกว่าบันไดเอ้ก" เงื่อนไขการทดสอบจะถูกประเมินจากบนลงล่าง เมื่อใดก็ตามที่พบเงื่อนไขการทดสอบที่เป็นจริง คำสั่งที่เกี่ยวข้องจะถูกดำเนินการ เมื่อเงื่อนไขการทดสอบทั้ง n ข้อเป็นเท็จ คำสั่ง else ทั่วไปจะถูกดำเนินการ

เรามาดูการทำงานจริงด้วยความช่วยเหลือของโปรแกรมกันดีกว่า

#include<stdio.h>
int main()
{
	int marks=83;
	if(marks>75){
		printf("First class");
	}
	else if(marks>65){
		printf("Second class");
	}
	else if(marks>55){
		printf("Third class");
	}
	else{
		printf("Fourth class");
	}
	return 0;
}

Output:

First class

โปรแกรมข้างต้นจะพิมพ์เกรดตามคะแนนในการทดสอบ เราได้ใช้โครงสร้างขั้นบันไดelse-ifในโปรแกรมด้านบน

  1. เราได้เริ่มต้นตัวแปรด้วยเครื่องหมาย ในโครงสร้างแลดเดอร์ else-if เราได้จัดเตรียมเงื่อนไขต่างๆ
  2. ค่าจากเครื่องหมายตัวแปรจะถูกเปรียบเทียบกับเงื่อนไขแรก เนื่องจากเป็นจริง ข้อความที่เกี่ยวข้องกับเงื่อนไขนี้จะถูกพิมพ์บนหน้าจอเอาต์พุต
  3. หากเงื่อนไขการทดสอบแรกกลายเป็นเท็จ ก็จะถูกเปรียบเทียบกับเงื่อนไขที่สอง
  4. กระบวนการนี้จะดำเนินต่อไปจนกว่าจะประเมินนิพจน์ทั้งหมดเสร็จสิ้น มิฉะนั้นการควบคุมจะออกจากโครงสร้าง else-if และจะแสดงข้อความเริ่มต้น (default statement)

ลองแก้ไขค่าและสังเกตการเปลี่ยนแปลงในเอาต์พุต

คำถามที่พบบ่อย

คำสั่ง if-else จะทดสอบนิพจน์บูลีนใดๆ รวมถึงช่วงและการตรวจสอบความสัมพันธ์ สวิตช์…เคส เปรียบเทียบตัวแปรหนึ่งกับค่าคงที่ที่กำหนดไว้ และมักจะสร้างตารางกระโดดที่เร็วกว่าในหลายกรณี

ปัญหา "else ที่ไม่มีวงเล็บปีกกา" คือความกำกวมว่า "else" นั้นอยู่ในเงื่อนไข if ใด เมื่อคำสั่ง if ถูกซ้อนกันโดยไม่มีวงเล็บปีกกา ในภาษา C นั้น "else" จะจับคู่กับคำสั่ง if ที่ใกล้ที่สุดที่ไม่มีการจับคู่เสมอ การเพิ่มวงเล็บปีกกาจะช่วยขจัดความสับสนนี้ได้

ใช่ ตัวดำเนินการตรรกะใช้สำหรับเชื่อมเงื่อนไขเข้าด้วยกัน: && ต้องการให้ทั้งสองด้านเป็นจริง, || ต้องการให้มีอย่างน้อยหนึ่งด้านเป็นจริง และ ! จะกลับผลลัพธ์ ตัวอย่างเช่น if (age > 18 && citizen) จะทดสอบสองเงื่อนไขพร้อมกันในคำสั่ง if เดียว

วงเล็บปีกกาเป็นตัวเลือกเสริมเมื่อเนื้อหาเป็นคำสั่งเดียว เพราะภาษา C จะประมวลผลเฉพาะบรรทัดถัดไปเท่านั้น แต่หากมีคำสั่งสองคำสั่งขึ้นไป จะต้องใช้วงเล็บปีกกาเพื่อจัดกลุ่มคำสั่งเหล่านั้น การใช้วงเล็บปีกกาเสมอเป็นนิสัยที่ปลอดภัยซึ่งช่วยป้องกันข้อผิดพลาดทางตรรกะ

การประเมินการลัดวงจรจะหยุดลงทันทีที่ทราบผลลัพธ์ เมื่อใช้ && หากด้านซ้ายเป็นเท็จ จะข้ามการประเมินด้านขวาไป เมื่อใช้ || หากด้านซ้ายเป็นจริง จะข้ามการประเมินด้านขวาไป วิธีนี้ช่วยหลีกเลี่ยงการทำงานที่ไม่จำเป็นและการดำเนินการที่ไม่ปลอดภัย

ใช่แล้ว เงื่อนไข else-if จะถูกประเมินจากบนลงล่างและหยุดที่เงื่อนไขแรกที่เป็นจริง การวางเงื่อนไขกว้างๆ ไว้ก่อนเงื่อนไขแคบๆ อาจทำให้มองไม่เห็นกรณีเฉพาะเจาะจง ดังนั้นควรเรียงลำดับการทดสอบจากที่เฉพาะเจาะจงที่สุดไปจนถึงทั่วไปที่สุด

ใช่แล้ว ผู้ช่วยเขียนโค้ด AI จะร่างบล็อกเงื่อนไขจากความคิดเห็น แปลงคำสั่ง if-else ที่ยาวให้เป็นโครงสร้างที่อ่านง่ายขึ้น และระบุข้อผิดพลาดที่อาจเกิดขึ้น เช่น การใช้ = แทน == ควรทดสอบตรรกะที่สร้างขึ้นก่อนที่จะเชื่อถือเสมอ

นักบิน GitHub ฟังก์ชันนี้จะเติมข้อความอัตโนมัติสำหรับเงื่อนไข if, else-if และเงื่อนไขซ้อนกันจากความคิดเห็นหรือโค้ดโดยรอบ นอกจากนี้ยังแนะนำนิพจน์เชิงสัมพันธ์และตรรกะ และสามารถเพิ่มวงเล็บปีกกาที่ขาดหายไปได้ แต่คุณควรตรวจสอบคำแนะนำแต่ละรายการก่อน

สรุปโพสต์นี้ด้วย: