Output แสดงผลลัพธ์ด้วย printf ในภาษาซี

รับสอนการเขียนโปรแกรม และ วิชาวิทยาการคอมพิวเตอร์อื่นๆ ดูรายละเอียดได้ที่นี่

หลักการเขียนโปรแกรมที่เราเคยพูดถึงในบท อัลกอริทึมในมุมมองของคอมพิวเตอร์ ประกอบด้วย 3 ขั้นตอนคือ

Input → Process → Output

ในบทที่แล้วเราพูดถึงวิธีการสร้างตัวแปรเพื่อเก็บค่า และทำการคิดเลขง่ายๆ กันไปแล้ว ที่ขาดไปของโปรแกรมเราก็คือการแสดงผลคำตอบออกมา ขั้นแรกมาดูส่วนที่ง่ายที่สุดกันก่อนกับการแสดงผล

การแสดงผล Output

การแสดงผลออกมาในภาษาซีมีหลายวิธีมากๆ แต่วิธีแบบมาตราฐานที่สุดเราจะทำด้วยการใช้คำสั่ง printf() แบบที่เคยพูดถึงไปครั้งนึงในบทแรกแล้ว

การใช้งานคำสั่ง printf() นั้นจะทำทำการโหลดชุดคำสั่งที่เก็บอยู่ใน library ที่ชื่อว่า stdio.h (standard input-output) เข้ามาด้วยคำสั่ง #include แบบนี้

#include<stdio.h>
int main()
{
    printf("hello TAMEMO");
    return 0;
}

ถ้าเรามีการเรียกใช้คำสั่ง printf() แต่ลืม include ตอนคอมไพล์มันจะแจ้งว่า undefined function "printf" หรือก็คือมันไม่รู้จัก printf นั่นเอง

สิ่งที่ต้องอย่าลืมอีกอย่างเกี่ยวกับการใช้ printf() คือ value ที่จะส่งไปปริ๊นจะต้องอยู่ในรูปแบบของ string (แปลว่า สายอักขระ = ประโยค นั่นเอง) แล้ววิธีที่จำบอกว่าสิ่งที่เราพิมพ์ไปเป็น string เราจะใช้สัญลักษณ์ " ที่เรียกว่า double-quote (เครื่องหมายคำพูดแบบ 2 ขีด, ถ้าเป็น ' จะเรียกว่า single-quote)

เช่น

printf("hello TAMEMO") //แบบนี้ได้ โปรแกรมจะทำการปริ๊นคำว่า hello TAMEMO ออกมาทางหน้าจอ
printf(hello TAMEMO)   //แบบนี้ไม่ได้ จะคอมไพล์ไม่ผ่านเพราะถือว่าเขียนผิดรูปแบบ
printf('hello TAMEMO') //แบบนี้ก็ไม่ได้ เพราะ string ต้องใช้ " เท่านั้น

สำหรับใครที่ใช้งาน IDE เวลาจะรันโปรแกรมส่วนใหญ่จะมีปุ่ม "Compile & Run" อยู่ (ส่วนใครใช้โปรแกรมอะไร ก็หาปุ่มนี้เอาเองนะ ในตัวอย่างนี้จะยกตัวอย่างเป็น Dev-C ที่มีคนใช้งานค่อนข้างเยอะ)

สำหรับ Dev-C ปุ่ม "Compile & Run" จะอยู่ใน toolbar ด้านบน หลังจากกดแล้ว (ถ้าไม่พิมพ์อะไรผิดนะ ฮา) IDE จะแสดง status ว่ากำลังทำการคอมไพล์อยู่ที่ด้านล่าง หลังจากนั้นจะรันผลลัพธ์ของโปรแกรมออกมาในหน้า console

สำหรับบางโปรแกรมหลังผลลัพทธ์ของเราแล้ว อาจจะมีการแสดงผล stat อะไรบางอย่างต่อให้ด้วย เช่น Dev-C มันจะแสดงเวลารวมที่ใช้มรการรันออกมาให้

 

ส่วนถ้าใช้งานแบบ cmd ก็จะเริ่มจากการสั่ง compile ด้วยคำสั่ง gcc แล้วก็ต้องรันโปรแกรม (รันเองด้วยนะ) จากนั้นโปรแกรมก็จะแสดงผลลัพธ์ออกมาตรงนั้นเลย

newline การขึ้นบรรทัดใหม่และอักษรพิเศษ

ถ้าใครลองพิมพ์โค้ดและสั่งคอมไพล์เองแล้ว อาจจะพบปัญหาบางอย่าง เช่นถ้าเราต้องการสั่งให้โปรแกรมขึ้นบรรทัดใหม่ เราจะทำยังไง

ลองแบบนี้ดูจะเวิร์กมั้ย

#include<stdio.h>
int main()
{
    printf("this is a book");
    printf("and a pen");
    return 0;
}

โดยเราก็คาดหวังว่าจะเห็นผลลัพธ์ออกมาแบบนี้

this is a book
and a pen

แต่ถ้าเราลองรันดูจริงๆ เราจะพบว่ามันจะออกมาเป็น..

this is a bookand a pen

นั่นเพราะว่าการขึ้นบรรทัดใหม่ในโค้ดโปรแกรม ไม่ได้เป็นการบอกว่าผลลัพธ์จะขึ้นบรรทัดใหม่ตามไงล่ะ งั้นถ้าลองแบบนี้ล่ะ..

#include<stdio.h>
int main()
{
    printf("this is a book
            and a pen");
    return 0;
}

ถ้าไม่ยอมขึ้นให้ ก็กด enter เองซะเลยเป็นไง!

แบบนี้ถ้ากดคอมไพล์ปุ๊บ ผลที่ได้คือหนักกว่าเดิม เพราะมันจะคอมไพล์ไม่ผ่าน!!

นั่นเพราะว่าในภาษาซี (และภาษาส่วนใหญ่ด้วย) การเขียน string นั้นจะต้องจบอยู่ในบรรทัดเดียวเท่านั้น ส่วนการขึ้นบรรทัดใหญ่จะต้องใช้อักษรพิเศษคือตัว \n (back-slash ตามด้วยตัว n) ตัวอักษรนี้ถือว่าเป็นตัวอักษร 1 ตัวแม้ว่าจะเขียนด้วย \ และ n ถึง 2 ตัวก็ตามนะ เช่น

printf("this is a book\n");
printf("and a pen");

//หรือแบบนี้ก็ได้

printf("this is a book\nand a pen");

ผลลัพธ์ก็จะออกมาเป็นแบบนี้

this is a book
and a pen

นั่นคือโปรแกรมจะทำการขึ้นบรรทัดใหม่ในทุกที่เราวาง \n ลงไปนั่นเอง ไม่จำเป็นต้องวางไว้หลังสุด จะวางตรงไหน และวางกี่ตัวก็ได้ตามใจเลย

Back-Slash Character

เป็นตัวอักษรพิเศษที่ไม่สามารถพิมพ์แบบปกติได้ เช่น enter สำหรับขึ้นบรรทัดใหม่ หรือการพิมพ์ \ ตัวเดียวก็ไม่ได้ (เนื่องจาก \ จะเป็นเพื่อเป็นการบอกว่าต่อไปจะเป็นอักษรพิเศษนะ)

\n     - ขึ้นบรรทัดใหม่
\"     - แสดง " (double-quote)
\t     - แท็บ (4หรือ8ช่อง แล้วแต่เครื่อง)
\\     - แสดง \ (เพราะพิมพ์ \ ธรรมดาแปลว่าเป็น Format code )

เช่น

printf("my name is "Ta" na");   //แบบนี้ไม่ได้ เพราะโปรแกรมจะงงคู่ของ " ตัวข้างนอก
printf("my name is \"Ta\" na"); //ต้องใช้แบบนี้แทน

my name is "Ta"

printf กับ variable

ที่ผ่านมาเราแสดงผลโดยใช้ value ที่เป็นแบบ static (หมายถึงค่าแบบตายตัว เปลี่ยนแปลงไม่ได้) ต่อไปเราจะมาทำงานกับ variable กันบ้าง

ในกรณีที่เรามีค่าเก็บไว้ในตัวแปร แล้วอยากแสดงผลออกมา เราก็ต้องใช้คำสั่ง printf() นี่แหละ แต่รูปแบบจะต่างออกไป

เช่น

int x = 1;
printf("x is x");

สั่งแบบนี้ไม่ได้แน่นอน เพราะคอมพิวเตอร์จะไม่รู้ว่า x ที่เราพิมพ์ไป ตัวไหนที่เป็น string ตัวไหนเป็น variable

และถ้าเรากดรัน แม้ว่าจะไม่เกิด error แต่ก็จะได้ผลออกมาแบบนี้

x is x

สำหรับภาษาซี เราจะต้องใช้สัญลักษณ์ % เป็นการบอกตำแหน่งของตัวแปร แบบนี้

int x = 1;
printf("x is %d");

เนื่องจาก x เป็นไทป์แบบ int เราจะใช้ %d ในการบอกว่าตรงนี้เป็นตำแหน่งของตัวแปร (สำหรับไทป์อื่นๆ เดี๋ยวจะพูดถึงต่อไป)

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

แบบนี้..

int x = 1;
printf("x is %d", x);

ก็จะได้ผลแบบนี้ออกมา

x is 1

ส่วนในกรณีที่มีตัวแปรหลายตัว เราจะต้องวางตัวแปรตามลำดับ เช่น

int a, b, sum;

a = 1;
b = 2;
sum = a + b;

printf("%d plus %d equals to %d", a, b, sum);

1 plus 2 equals to 3

ลำดับการแสดงค่าตัวแปรทั้งหมด จะเรียงตามลำดับตัวแปรที่ใส่ลงไป

 

ส่วนเรื่องที่ทำไมต้องเป็น %d แล้วมี % อย่างอื่นอีกมั้ย เดี๋ยวเราจะพูดกันต่อในบทต่อไป เพราะเราต้องรู้จักกับ Variable Type หรือชนิดของตัวแปรกันซะก่อนนะ

 

7428 Total Views 12 Views Today
Ta

Ta

สิ่งมีชีวิตตัวอ้วนๆ กลมๆ เคลื่อนที่ไปไหนโดยการกลิ้ง .. ถนัดการดำรงชีวิตโดยไม่โดนแสงแดด
ปัจจุบันเป็น Senior Software Engineer อยู่ที่ Centrillion Technology
งานอดิเรกคือ เขียนโปรแกรม อ่านหนังสือ เขียนบทความ วาดรูป และ เล่นแบดมินตัน

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *