การรับและการแสดงผลของข้อมูล 2

ภาษา c

         บทนี้จะกล่าวถึงวิธีการรับข้อมูลจาก คีย์บอร์ดเพราะรูปแบบการรับเข้าข้อมูลจะขึ้นอยู่กับ รูปแบบของชนิดข้อมูลที่เราจะรับ โดยที่เราจำเป็นต้องเลือกให้ถูกรูปแบบในการใช้ด้วยนะครับ เพราะท่าผิดรูปแบบ ก็จะทำให้โปรแกรม เกิด errorนะครับ
function ที่ใช้ในการรับของมูลจากคีย์บอร์ดคือ scanf(scan formatted)

        scanf("sting_format",& addrss_list);
รูปแบบ
     
sting_format : จะแตกต่างจาก ของprintf(); ตรงที่ เราจะใช้แค่เป็ฯตัวแทนรูป
                     แบบชนิดข้อมูลเท่านั้น เช่น %d, %c, %s, %f,…. เท่านั้น
addrss_list : จะเป็นที่อยู่ของข้อมูลที่เรารับเข้ามาว่าเราจะไปเก็บที่ตัวแปร
                    ใหนซึ่งจะแตกต่างกับของ function printf();  ตรงที่มีตัว &
                    อยากให้คิดง่ายๆว่ามันบอกว่าให้เก็บเข้าตัวแปรใหน
 
ข้อความจำ
 
การใช้ฟังก์ชั่น scanf() รับข้อมูลชนิดสติงต่างๆเข้ามาทางคีย์บอร์ดนั้นเราไม่ต้องใส่ & นำหน้าตัวแปรที่เราจะเอาค่า string ไปเก็บไว้เนื่องจากภาษาซีกำหนดให้ชื่อตัวแปรชนิดสตริง เป็นการอ้างอิงถึงที่อยู่ของตัวแปรนั้นๆอยู่แล้ว
ตัวอย่างโปรแกรมการแสดงการใช้งาน function scanf();
1:   #include<stdio.h>
2:   main(){
4:   char name[20], Bloodgroup; //name จะรับได้19 ตัว 
5:   int age;
6:   float weight;
7:      
8:      printf("name:");
9:      scanf("%s", name);   //รับข้อมูลชนิดสติงไม่ต้องใส่&
10:      Printf("Group Blood:");
11:      scanf(" %c",&Bloodgroup);  /* ที่ไม่ใช่ชนิดสตริงต้องมี & เสมอ
13:      printf("Age :");                      แล้วเฉพาะชนิดcharater ต้องมีการ
14:      scanf("%d",&age);                เครียลสกรีน เช่นใส่ clrscr(); ในบาง
15:      Printf("Weight :");                  โปรแกรม ก็ แค่เว้นข้างหน้าตัว
16:      scanf("%f",&weight);             %c 1ครั้งหรือ 1 เคาะหน้าตัวนั้น
17:                                               บางโปรแกรมก็ไม่ต้องก็ได้*/
18:      printf("#########################################");
19:      printf("You name :%s\tBloodGroup:%c\n",name,Bloodgroup);
20:      printf("You Age:%d\tWeight:%.2f",age,weight);
21:    
22:      }
     
คุณลองนำcode นี้ ไปใส่ในโปรแกรมเขียนภาษาซี แล้วกรอกข้อมูลแล้วสังเกตุดูว่าเกิดอะไรขึ้นนะครับ และการรับข้อมูล ในการรับข้อมูลประเภทแบบตัวอักษรยังมีอีก และเราไปดูต่อกันเถอะ
การรับและแสดงข้อมูลแบบตัวอักษร
การรับแสดงข้อมูลแบบตัวอักษร นอกจากจะใช้ฟังก์ชั่น scanf() และ printf()แล้วยังมีfunction เฉพาะที่ใช้ในการรับข้อมูลแบบตัวอักษร คือ getchar() และแสดงผลข้อมูลแบบตัวอักษรคือ putchar()ด้วย
getchar() : เป็นfunctionสำหรับรับข้อมูลจากคีย์บอร์ด 1 ตัวอักษร
putchar() : เป็นfunction()สำหรับแสดงผลข้อมูล 1 ตัวอักษรออกทางจอภาพ
ตัวอย่างนี้จะแสดงการเปรียบเทียบระหว่าง getchar() กับ scanf() และ putchar กับ printf() นะครับ
1:   #include<stdio.h>   #include<stdio.h>
2:        
4:   main(){   main(){
5:   char ch;   char ch;
6:   ch = getchar();    scanf("%c",&ch);
7:       putchar(ch);     printf("%c",ch);
8:   }   }

ถ้าผมป้อนตัวอักษร a ในโปรแกรมทั้ง2 นี้ก็จะได้ผลลัพธ์ดั้งต่อไปนี้
 
ผลลัพธ์โปรแกรม
 
  :a
   a
ผลลัพธ์ทั้งสองจะได้เหมือนกัน เพราะฉนั้น ขึ้นอยู่กับว่าท่าเราจะรับตัวอักษรแค่ตัวเดียว เราจะใช่อะไรก็แล้วแต่ท่านนะครับ
 
ข้อความจำ
 
เราสามารถใช้ผสมกันได้ เช่นถ้าคุณรับ โดย getchar() คุณสามารถแสดงโดยฟังก์ชั่น printf() ได้ หรือจะรับด้วย scanf() แล้วแสดงด้วย putchar(); ก็ได้    (ในกรณี เป็นการรับแสดงข้อมูล ตัวอักษร)
Function getch() และ getche()
นอกจากไอ้เจ้าfunction getchar() แล้วยังมีอีก2 ฟังก์ชั่นที่ใช้ในการรับขอมูลแบบตัวอักษรคือ
getch() :   อ่าน 1 ตัวอักษรจากคีย์บอร์ด แต่ไม่แสดงตัวอักษรที่รับเข้ามาออก
               ทางจอภาพ
getche() : อ่าน1 ตัวอักษรจากคีย์บอร์ด และแสดงตัวอักษรที่รับเข้ามาออก
               ทางจอภาพ

ตัวอย่างต่อไปนี้ผมจะทำการเปรียบเทียบฟังก์ชั่น3 ตัวเพื่อให้ดูผลว่ามันเป็นยังไงนะครับ
1:   #include<stdio.h>   #include<stdio.h>   #include<stdio.h>
2:            
4:   main(){   main(){   main(){
5:   char ch;   char ch;   char ch;
6:   do{   do{   do{
7:      ch = getchar();     ch = getch();     ch = getche();
8:   }while(ch !='E' );   }while( ch !='E');   }while( ch !='E');
9:   }   }   }

 
ผลลัพธ์โปรแกรม
 
a
b
e
d
E
         a b e d E
อธิบายโปรแกรม ไอ้เจ้า getchar() เราต้องกด enter เพื่อจะให้รับข้อมูลเข้าแล้วมันก็แสดงให้เราเห็นว่าเรารับอะไรเข้าไป แต่สำหรับ getch() และ getche() ไม่จำเป็นต้องกด enter มันจะรับให้เราอัตโนมัติ แต่จะรับเข้าไปแบบที่ระตัวอักษร โดยที่ getch() จะไม่แสดงผลตัวอักษรที่เราป้อนเข้าไป ไม่เหมือนกับ getche ดังผลลัพธ์โปรแกรมดั้งกล่าวมาข้างบน 
    โปรแกรมพวกนี้เป็นการวนลูปหรือเรียกกันว่าทำซ่ำซึ่งผมจะอธิบายใน บท คำสั่งควบคุมโปรแกรม นะครับม่อยากอธิบายในบทความนี้เดียวมันจะยาวจนน่าเกียจแถม เรื่องการรับข้อมูลยังไม่หมดอยู่ด้วย งั้นเรามาต่อกันเลยดีกว่า
นี้ผมจะเปรียบเทียบการทำงานเพื่อให้ศึกษาอาจจะช่วยได้บางเล็กน้อยนะครับ
function กดEnter แสดงผลหน้าจอ
getchar()
yes
yes
getch()
no
no
getche()
no
yes
การรับและแสดงผลแบบของข้อมูลสติง
นอกจาก printf()กับscanf() ก็ ยังมี gets() กับputs() ที่ใช้ในการรับและแสดงผลของ string ด้วยนะครับ
ฟังก์ชั่น gets() : ผมจะไม่บรรยายมาก เอาเป็นว่าเอาไว้ใช้รับค่า string นะครับ
ฟังก์ชั่น puts() : เอาไว้แสดงค่าของ string ที่รับมา ส่วนวิธีใช้ดูจากตัวอย่าง
                        อันที่สองได้เลยครับ
นี้คือตัวอย่างผมจะเปลียบเทียบการใช้ระหว่าง gets() กับ scanf() นะครับ
1:   #include<stdio.h>   #include<stdio.h>
2:        
4:   main(){   main(){
5:     char name[20];     char name[20];
6:   printf("You name?:");   printf("You name?:");
7:     gets(name);      scanf("%s",name);
8:   printf("hi %s",name);   printf("hi %s",name);
9:      
10:   }   }

 
ผลลัพธ์โปรแกรม
     
ผลลัพธ์โปรแกรม
 
You name? : Konthai Kup
hi Konthai Kup
                                                              You name? : Konthai Kup
hi Konthai
จากตัวอย่างท่าเราสังเกตุเราจะเห็นว่าสิ่งที่เราป้อนเข้าไป มันได้หายไปในส่วนของการใช้ scanf(); แต่ที่ในส่วนทโปรแกรมที่ใช้ gets() มันออกมาตามข้อมูลที่เราใส่ลงไปทั้งหมด เพราะไอ้ตัวนี้มันจะรับหมดทุกอย่าง จะหยุดเหมือเรากด Enter เท่านั้น แต่ sanf() มันไม่ได้รับหมดทุกตัว พอเจอช่องว่างปับตัดทิ้งส่วนที่เหลือทันที่
ตัวอย่างนี้จะแสดงผลการทำงานของ gets()และ puts() นะครับ
1:   #include<stdio.h>
2:    
4:   main(){
5:     char name[20];
6:   printf("You name?:");
7:     gets(name);
8:   printf("hi you name:");
9:   put(name);
10:   }

 
ผลลัพธ์โปรแกรม
 
     You name?: Konthai nakup
     hi you name: Konthai nakup

>> ตัวดำเนินการ

1 ความคิดเห็น: