คุณยังไม่ได้ Log in | สมัครสมาชิก ฟรี
กลับหน้าแรก วิชาการ.คอม
<script language="JavaScript" src="http://www.vcharkarn.com/javafeed/article/18065" type="text/javascript"></script>
การเขียนโปรแกรมภาษา C เบื้องต้น (Introduction to C Programming)
บทเรียนอย่างง่าย เพื่อเพิ่มความรู้และความเข้าใจ ที่จำเป็นต่อการเป็นโปรแกรมเมอร์มืออาชีพในอนาคต คนที่จะมีใจรัก ที่จะก้าวไปบนถนนแห่งการพัฒนาฝีมือและฝึกฝนการเขียนโปรแกรมด้วยตัวเอง
post ครั้งแรก: Thu 29 March 2007, 11:49 am ปรับปรุงล่าสุด: Wed 4 April 2007, 4:03 pm
สารบัญ

หน้าที่ 8 - ตัวแปรสตริง
7. ตัวแปรสตริง (String)

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

โดยทั่วไปแล้วโปรแกรมภาษา C จะสนับสนุนข้อมูลที่เป็นอักษรโดยกำหนดให้อักษรแต่ละตัว ในรูปแบบตัวแปรประเภท char และข้อมูลสตริงนั้นโปรแกรมที่เขียนด้วยภาษา C จะถือว่าเป็นชุดข้อมูลตัวหนังสือที่เรียงกันตามลำดับ ขณะที่โปรแกรมที่เขียนด้วยภาษา C++ จะถือว่าสตริงเป็นตารางอาเรย์ข้อมูลประเภทตัวหนังสือ (Array of char) โดยตัวหนังสือจะอยู่ในตารางแต่ละช่อง และ ณ ตำแหน่งสิ้นสุดของตารางอาเรย์ที่เก็บตัวแปรสตริงนั้นจะมีสัญลักษณ์ “{PBODY}” (ตัวสิ้นสุดสตริง หรือ ตัว NULL) บรรจุอยู่ ดังนั้น ในการเตรียมเนื้อที่สำหรับตัวแปรสตริงที่ประกอบด้วยตัวหนังสือ n ตัวนั้นจะต้องเตรียมตารางไดนามิกขนาด n+1 ช่องเสมอ ดังตัวอย่างต่อไปนี้

1) ตัวหนังสือ ‘a’ เป็นตัวแปร char จะใช้เนื้อที่ 1 ไบต์ แต่ “a” เป็นตัวแปร string แล้ว จะต้องใช้เนื้อที่ขนาด 2 ไบต์เพื่อจุตัวอักษร ‘a’ และ ตัวสิ้นสุดสตริง ({PBODY})
2) ตัวแปรสตริงสามารถประกาศให้อยู่ในรูปตารางต่อไปนี้ได้
a. ตารางอาเรย์ตัวหนังสือ char String1[10] สามารถรองรับตัวหนังสือได้มากที่สุด 9 ตัว และ ตัวสิ้นสุดสตริง
b. ตัวแปรพอยเตอร์ตัวหนังสือ char *String2 สามารถรองนับตัวหนังสือได้ตามที่ผู้เขียนโปรแกรมได้เตรียมเนื้อที่ตารางไดนามิกส์ไว้

ถ้าต้องการทำอะไรกับตัวแปรสตริงแล้วให้เรียกใช้เฮดเดอร์ไฟล์ string.h ซึ่งเป็นไลบรารีไฟล์มาตรฐานสำหรับจัดการกับตัวแปรสตริง

เราสามารถตั้งค่าเริ่มต้นให้ตัวแปรสตริงได้ 2 วิธีหลักคือ
char S1[] = “Example”; ซึ่งภายในตัวแปรประกอบด้วย

S1 |E|x|a|m|p|l|e|{PBODY}|

ทั้งนี้เนื่องจากการเตรียมพื้นที่ขนาด 8 ช่องตาราง โดย 7 ช่องตารางแรกเก็บตัวหนังสือ และ ข้อมูลช่องสุดท้ายเก็บตัวสิ้นสุดสตริง

char S2[20] = “Another Example”; ซึ่งภายในตัวแปรประกอบด้วย

S2            |A|n|o|t|h|e|r| |E|x|a|m|p|l|e|{PBODY}||?|?|?|?| 


ทั้งนี้เนื่องจากการเตรียมพื้นที่ขนาด 20 ช่องตาราง แต่ใช้จริง 16 ช่อง คือตัวหนังสือ 15 ช่องและ ช่องที่ 16 เก็บตัวสิ้นสุดสตริง

การตั้งต้นตัวแปรสตริง ดังตัวอย่างต่อไปนี้ถือว่าเป็นการตั้งต้นตัวแปรสตริงที่ถูกต้อง

5538


ดังนั้น สิ่งที่เกี่ยวข้องสตริงสามารถสรุปออกมาได้ดังนี้
- ตัวแปรสตริงคือ ลำดับตัวหนังสือที่อยู่ภายในเครื่องหมายอัญประกาศ หรือเครื่องหมายคำพูด (“ ”) หรือ ตัวแปรสตริงคงที่ (String Constant)
- อีกทางหนึ่งตัวแปรสตริงถือว่าเป็นตัวแปรตารางอาเรย์ ของตัวหนังสือ (Array of char)
- สามารถใช้คำสั่ง printf scanf และ print ของภาษา C กับตัวแปรสตริงได้
- การประมวลเท็กซ์ คือการประมวลตัวแปรสตริง
- หน่วยข้อมูลพื้นฐานของตัวแปรสตริงคือตัวหนังสือหรือ ชุดตัวหนังสือ ไมใช่ตัวเลข
- การประยุกต์ใช้ตัวแปรสตริงนั้นคือ Word Processing หรือ Text Editor

ตัวอย่างการใช้ตัวแปรสตริงจะแสดงให้เห็นดังนี้
#include  
void main()
{
char first[100], last[100];
int i;

printf("\nEnter your first name:");
scanf("%s", first );
printf("\nEnter your last name:");
scanf("%s", last );
printf("\nYour full name is: %s %s\n", first, last );
printf("First name is: ");
for( i=0; (i<100 && first[i] != '{PBODY}') ; i++ ){
printf("%c ",first[i]);
}
printf("\nLast name is: ");
for( i=0; (i<100 && last[i] != '{PBODY}') ; i++ ){
printf("%c ",last[i]);
}
printf("\n");
}


ผลที่ได้การเขียนโปรแกรมเติมชื่อและนามสกุลจะแสดงให้เห็นในภาพที่ 7.1

5539


การใช้งานตัวแปรสตริงนั้นมีหลักการดังนี้
- เตรียมพื้นที่ตารางอาเรย์ให้ใหญ่พอรับตัวหนังสือแทนคำและ ตัวสิ้นสุดสตริงดังต่อไปนี้

char str1[6] = “Hello”;
char str2[] = “Hello”;
char *str3 = “Hello”;
char str4[6] = {‘H’,’e’,’l’,’l’,’o’,’{PBODY}’};

ตัวแปรสตริงแต่ละตัวถือว่าเป็นตัวแปรคงที่ ดังนั้นจึง Assign ค่าแทนกันเช่นตัวอย่างต่อไปนี้ไม่ได้

Str1 = Str2; // ห้ามทำเช่นนี้กับตัวแปรสตริง เพราะมีวิธีอื่นที่ดีกว่านั้น

ตัวอย่างต่อไปนี้แสดงให้เห็น วิธี Assign ตัวแปรสตริงโดยใช้ตัวแปรพอยเตอร์ เข้าช่วย

char *S1 = “Hello”, *S2 = “Goodbye”; // ตัวแปร S1 และ S2 แก่ไขเปลี่ยนแปลงไม่ได้
char *S3;
S3 = S1; // บังคับให้ S3 ชี้ไปที่ แอดเดรสของตัวแปรพอยเตอร์ S1
S3 = S2; // บังคับให้ S3 ชี้ไปที่ แอดเดรสของตัวแปรพอยเตอร์ S2

อีกตัวอย่างในการ Assign ตัวแปรสตริงสามารถแสดงให้เห็นดังนี้
char Str[6] = “Hello”; // ตั้งต้นตัวแปร Str ด้วยคำว่า Hellow
char Str[0] = ‘Y’; char Str[4] = ‘{PBODY}’; // การแก้ไขให้ Str = “Yell”

อย่างไรก็ตาม วิธีแก้ไขเปลี่ยนแปลงข้อมูลสตริงในตารางมีเงื่อนไขว่า

- ตารางอาเรย์ที่ทำหน้าที่เป็นสตริงจะต้องปิดท้ายด้วย ‘{PBODY}’ เสมอ มิฉะนั้นตัวแปรอาเรย์ที่ทำหน้าที่เป็นสตริงจะไม่มีจุดสิ้นสุดสตริง
- สตริงที่แก้ไขต้องมีขนาดน้อยกว่าขนาดของตารางอาเรย์ที่เก็บค่าสตริง

การเปลี่ยนแปลงแก้ไขตัวแปรสตริงโดยใช้ไดนามิกอาเรย์นั้นต้องใช้ความระมัดระวังเป็นอย่างยิ่ง เพราะตารางไดนามิกส์นั้นต้องเตรียมพื้นที่ให้ ตัวสิ้นสุดสตริง (NULL) มิฉะนั้นโปรแกรมจะพิมพ์ข้อมูลสตริงออกมาผิดไปจากที่ต้องการ ดังตัวอย่างต่อไปนี้

char *s; 
s = (char *)malloc(sizeof(char) * 0); // - WRONG, need to allocate 1 more space
strcpy(s, "linux");
printf("%s\n", s);


กรณีที่ใช้คำสั่ง strlen เพื่อหา ขนาดอาเรย์ก่อนทำ Dynamic allocation (malloc) นั้น พึงรับทราบว่า คำสั่ง strlen จะมีขนาดเพียงพอสำหรับตัวจำนวนอักษรที่ใช้ในตัวแปรสตริงเท่านั้น แต่ไม่ได้นับตัวแปร NULL ที่ใช้กำหนดจุดสิ้นสุดของสตริงด้วย โดยที่รายละเอียดเกี่ยวกับคำสั่ง strlen จะกล่าวถึงในตอนต่อไป


การกำหนดค่าให้ตัวแปรสตริง (String Assignment)


ตัวอย่างการกำหนดค่าให้ตัวแปรสตริง

char s[5]="SIIT";      	// ใช้ได้, กำหนดค่าตัวแปรสตริงให้ตัวแปรอาเรย์
char dept[5], *d=dept; // ใช้ได้, กำหนดค่าตัวแปรสตริงให้ตัวแปรพอยเตอร์
char name[20];
name = “C. Sinthanayothin"; // ผิด อย่ากำหนดตัวแปรสตริงให้ตัวแปรอาเรย์ด้วยวิธีนี้
strcpy(name,“C. Sinthanayothin"); // ใช้ได้, ให้ก๊อปปี้ค่าสตริงโดยใช้คำสั่ง strcpy
strcpy(dept,"IT"); // ใช้ได้, ก๊อปปี้ค่าสตริง ลงในตัวแปร dept
printf("%s %s %s\n",d,s,dept); // ใช้ได้, แสดงผลค่าสตริงด้ว printf
d = strcpy(s,"EE"); // ใช้ได้, นี่คือการคืนค่าตัวแปรสตริง ลงใน ตัวแปร d ด้วยคำสั่ง strcpy
printf("%s %s %s %s\n",name,d,s,dept);

char c1[30], c2[30]=“This is new c1 string”;
char s[30] = "c programming ";
char str1[30]; // วิธี้ทำให้ตัวแปร str1 ไม่เป็น l-value เพราะเป็น constant array
char *str; // วิธี้ทำให้ตัวแปร str เป็น l-value เพราะเป็น ตัวแปรพอยเตอร์
strcpy(c1, c2); // ใช้ได้, ก๊อปปี้ข้อมูลใน c2 ลงใน c1
str = strcat(s,"is great!!"); // ใช้ได้, คือค่าเป็น ตัวแปรพอยเตอร์ประเภท char
str1 = strcat(s,"is great!!"); // ผิด, ฟังก์ชัน strcat ตอ้งคืนค่าด้วยตัวแปรพอยเตอร์ประเภท char ไม่ใช่ตารางอาเรย์ประเภท char


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

ตัวแปรสตริงนั้นจะใช้ %s เป็นตัว place holder ขณะที่ใช้คำสั่ง sscanf ในการอ่านข้อมูลจำพวกสตริงแล้วจัดการแปลงข้อมูลให้อยู่รูปตามที่กำหนด ดังตัวอย่างต่อไปนี้

int sscanf( const char *buffer, const char *format [, argument ] ... ); 

char ch, int inum, float fnum;
char buffer[100] = “A10 50.0”;
sscanf(buffer,”%c%d%f”,&ch,&inum,&fnum); /* puts ‘A’ in ch, 10 in inum and 50.0 in fnum */

sscanf(" 85 96.2 hello","%d%.3lf%s",&num,&val,word);

// results: num=85, val = 96.2, word = "hello"


ส่วน sprintf ใช้แสดงผลลัพธ์ที่อยู่ในรูปแบบต่างๆ ให้เป็นตัวแปรสตริงดังตัวอย่างต่อไปนี้
int sprintf( char *buffer, const char *format [, argument] ... );

char buffer[100];
sprintf(buffer,”%s, %s”,LastName,FirstName);
if (strlen(buffer) > 15)
printf(“Long name %s %s\n”,FirstName,LastName);


ถ้าต้องการแปลงตัวเลขให้เป็นข้อมูลสตริงให้ใช้ฟังก์ชัน sprintf และ ตัวแปรดัชนี้ char ทำตามคำสั่งต่อไปนี้

int sscanf(char *buffer, const char *format [, argument ] ... ); 
char S[10]; int day, month,year;
sprintf(S,”%d/%d/%d”, day, month, year);
ถ้า day = 23, month = 8, year = 2001 ผลลัพธ์คือ S = “23/8/2001”


ต่อไปนี้คือตัวอย่างการใช้ sprintf กับ sscanf เมื่อเปรียบเทียบกับ printf

#include 
#include
int main()
{
char s[30]="85 96.2 hello";
int num, mon=8,day=23,year=2001;
double val;
char word[10]; // can we use: char *word;
// make sure your assign the proper address for pointer
sscanf(" 85 96.2 hello","%d%lf%s",&num,&val,word);
printf("num=%d val=%.3lf word=%s\n",num,val,word);
sprintf(s,"%d/%d/%d", mon, day, year);
printf("s = %s\n",s);
return 0;
}


ข้อทบทวน: ภาษาซี มีฟังก์ชันที่ใช้ดัดแปลงแก้ไขตัวแปรสตริง หลายแบบตามความต้องการของผู้ใช้ได้แก่:

strlen(str) – คำนวณความยาวสตริง ซึ่งจะมีการนับไปเรื่อยๆ จนกว่าจะพบตัวแปร NULL ถึงจะหยุดโดยไม่มีการนับตัวแปร NULL ที่สิ้นสุดประโยคเข้าไปด้วย ดังตัวอย่างต่อไปนี้

int strlen(char *str);
char str1 = “hello”;
strlen(str1) จะคืนค่าออกเป็น 5 เพราะ มีอักษร 5 ตัว

strcpy(dst,src) – ก็อปปี้ข้อมูลจากตัวแปรสตริง src พร้อมตัวสิ้นสุดสตริง NULL ไปที่ตัวแปรสตริง dst แต่มีเงื่อนไขว่าตัวแปร des ต้องได้รับการเตรียมพื้นที่ให้ใหญ่พอๆกับตัวแปร src และการเตรียมพื้นที่ ให้ ตัวแปร src และ ตัวแปร dst ต้องไม่ทับซ้อนกันมิฉะนั้นจะให้ผลที่คาดเดาไม่ได้ การประกาศใช้ฟังก์ชัน strcpy จะทำได้ดังนี้

char *strcpy(char *dst, char *src)

strncpy(dst,src,n) – ก็อปปี้ข้อมูลจากตัวแปรสตริง src โดยไม่ก๊อปปี้ตัวสิ้นสุดสตริง NULL ไปที่ตัวแปรสตริง dst เนื่องจากมีจำนวนตัวอักษร n เป็นตัวจำกัดไว้ แต่มีเงื่อนไขว่าตัวแปร des ต้องได้รับการเตรียมพื้นที่ให้ใหญ่พอๆกับตัวแปร src และการเตรียมพื้นที่ ให้ ตัวแปร src และ ตัวแปร dst ต้องไม่ทับซ้อนกันมิฉะนั้นจะให้ผลที่คาดเดาไม่ได้ การประกาศใช้ฟังก์ชัน strncpy จะทำได้ดังนี้

char *strncpy(char *dst, char *src, int n)

strcmp(str1,str2) – เปรียบเทียบข้อมูลในตัวแปร str1 กับข้อมูลในตัวแปรสตริง str2 โดยใช้อักษรตัวแรกที่เริ่มต่างกันเป็นหลักซึ่งให้ผลดังนี้

น้อยกว่า 0 -- ถ้าค่า ASCII ที่เริ่มแตกต่างใน str1 มีขนาดเล็กกว่า str2 หรือ str1 เริ่มต้นเหมือนกับ str2 แต่ str2 นั้นมีตัวอักษรมากกว่า
มากกว่า 0 -- ถ้าค่า ASCII ที่เริ่มแตกต่างใน str1 มีขนาดใหญ่กว่า str2 หรือ str1 เริ่มต้นเหมือนกับ str2 แต่ str1 นั้นมีตัวอักษรมากกว่า
0 ถ้าตัวแปรสตริงทั้ง 2 ตัวนั้นใช้ตัวอักษรเดียวกันและความยาวเท่ากัน

การประกาศใช้ฟังก์ชัน strcmp จะทำได้ดังตัวอย่างต่อไปนี้

int strcmp(char *str1, char *str2) 
#include
#include
void main()
{
printf("%d \n", strcmp("hello","hello")); // returns 0
printf("%d \n", strcmp("yello","hello")); //returns value > 0
printf("%d \n", strcmp("Hello","hello")); // returns value < 0
printf("%d \n", strcmp("hello","hello there")); // returns value < 0
printf("%d \n", strcmp("some diff","some dift")); //returns value<0
}

strncmp(str1,str2,n) – เปรียบเทียบข้อมูลในตัวแปร str1 กับข้อมูลในตัวแปรสตริง str2 เป็นจำนวนอักษร n ตัวโดยใช้อักษรตัวแรกที่เริ่มต่างกันเป็นหลัก และ จะมีการเปรียบเทียบในกรณีที่อักษรในตัวแปรมีจำนวนน้อยกว่า n

การประกาศใช้ฟังก์ชัน strncmp จะทำได้ดังตัวอย่างต่อไปนี้

int strncmp(char *str1, char *str2,int n)

ความแตกต่างระหว่าง strcmp และ strncmp จะแสดงให้เห็นดังตัวอย่างต่อไปนี้

strcmp(“some diff”,”some DIFF”)
-- returns value > 0
strncmp(“some diff”,”some DIFF”,4)
-- returns 0


strcat(str1,str2) – ใช้ในการนำข้อมูลในตัวแปร str2 ไปต่อท้ายตัวแปร str1 ซึ่งจะคืนค่าเป็น str1 ที่ได้รับการต่อให้ยาวขึ้น ตัวอย่างเช่น

char *s1 = “C. “, *s3 = strcat(s1,“Sinthanayothin”);
ผลลัพธ์: s1 = s3 = “C. Sinthanayothin”

การประกาศใช้ฟังก์ชัน strcat จะทำได้ดังตัวอย่างต่อไปนี้

char* strcat(char *s1, const char* s2);
strncat(str1,str2,n) – ใช้ในการนำข้อมูลในตัวแปร str2 จำนวน n อักษรไปต่อท้ายตัวแปร str1 ซึ่งจะคืนค่าเป็น str1 ที่ได้รับการต่อให้ยาวขึ้น ตัวอย่างเช่น

char s1[10] = "IT ";
char *s3 = strncat(s1,"050Basic",3);
printf("%s \n", s1); printf("%s \n", s3);
ผลลัพธ์: s1 = s3 = IT 050

การประกาศใช้ฟังก์ชัน strncat จะทำได้ดังตัวอย่างต่อไปนี้

char* strncat(char *s1, const char* s2ม int n);

ฟังก์ชันเหล่านี้มีอยู่ในไลบรารีเฮดเดอร์ไฟล์ string.h ซึ่งต้องใช้คำสั่ง #include ถึงจะเรียกใช้ได้

เราสามารถสร้างตารางอาเรย์ให้ตัวแปรสตริง (Array of string) ดังตัวอย่างต่อไปนี้

char month[12][10] = {“January”, “February”, “March”, “April”, “May”, “June”, “July”, “August”, “September”, “October”, “November”, “December” };

แต่ถ้าต้องการให้ตารางอาเรย์สำหรับตัวแปรสตริง สามารถรองรับข้อมูลสตริงที่มีความยาวต่างกัน (Ragged array of string) ให้ดังนี้
char *MonthNames[13]; /* an array of 13 strings */
MonthNames[1] = “January”; /* String with 8 chars */
MonthNames[2] = “February”; /* String with 9 chars */
MonthNames[3] = “March”; /* String with 6 chars */
…

ตัวอย่างตารางอาเรย์ให้ตัวแปรสตริงแสดงวันทั้ง 7 แบบ Ragged array of string จะแสดงให้เห็นในตัวอย่างต่อไปนี้

#include 
#include
void main()
{
char *days[7]; char TheDay[10];int day;
days[0] = "Sunday"; days[1] = "Monday";
days[2] = "Tuesday"; days[3] = "Wednesday";
days[4] = "Thursday"; days[5] = "Friday";
days[6] = "Saturday";
printf("Please enter a day: ");
scanf("%9s",TheDay);
day = 0;
while ((day < 7) && (strcmp(TheDay,days[day])))
day++;
if (day < 7) printf("%s is day %d.\n",TheDay, day);
else printf("No day %s!\n",TheDay);
}


ในการรับและส่งข้อมูลจำพวกสตริงนั้นทำได้หลายวิธี ได้แก่
1) ในกรณีที่ใช้คำสั่ง printf และ scanf นั้นให้ใช้ %s ในการอ่านข้อมูลและ แสดงข้อมูลสตริงออกมา
2) ใช้คำสั่ง gets ในการข้อมูลสตริงออกมาทีละบรรทัด ดังตัวอย่างต่อไปนี้

char name1[10], name2[30];
scanf(“%s”,name1); // Input: IT 050
gets(name2); // Input: C Programming
printf(“Course is %s\n”,name); // Output: IT 050
printf(“Detail is %s\n”,name2); // C Programming

5540


การใช้งานคำสั่งกับตัวแปร อักษร (char operators)


นี่คือตัวอย่างการใช้งานฟังก์ชันที่คุมการรับส่งข้อมูลตัวอักษร

char ch;
ch = getchar(); // Input ch – ใช้แทน scanf("%c",&ch);
putchar(ch); // Output ch – ใช้แทน printf("Character is %c\n",ch);
ch = 'S'; // ใช้ได้ ตัวอย่างการกำหนดค่าตัวอักษรให้ตัวแปร char
putchar(ch); // ผลที่ได้ออกมาคือ S
putchar('T'); // ผลที่ได้ออกมาคือ T

ฟังก์ชันที่ใช้กำหนดการทำงานให้ตัวแปร char ได้แก่

คำสั่ง: isalpha(ch);
การใช้งาน: คืนค่าเป็น TRUE (จริง) ถ้า ch มีค่าในช่วง A-Z หรือ a-z
ตัวอย่าง: c = isalpha(ch); // คืนค่า TRUE ถ้า ch=‘M’ และ คืนค่า FALSE ถ้า ch=‘5’
คำสั่ง: isdigit(ch);
การใช้งาน: คืนค่าเป็น TRUE (จริง) ถ้า ch มีค่าในช่วง0-9
ตัวอย่าง: d = isdigit(ch); // คืนค่า FALSE ถ้า ch=‘M’ และคืนค่า TRUE ถ้า ch=‘5’
คำสั่ง: islower(ch);
การใช้งาน: คืนค่าเป็น TRUE (จริง) ถ้า ch มีค่าในช่วง a-z
ตัวอย่าง: c = islower(ch); // คืนค่า FALSE ถ้า ch=‘M’ return false, และคืนค่า TRUE ถ้า ch=‘m’
คำสั่ง: isupper(ch);
การใช้งาน: คืนค่าเป็น TRUE (จริง) ถ้า ch มีค่าในช่วง A-Z
ตัวอย่าง: c = isupper(ch); // คืนค่า TRUE ถ้า ch=‘M’ return false, และคืนค่า FALSE ถ้า ch=‘m’
คำสั่ง: isspace(ch);
การใช้งาน: คืนค่า TRUE ถ้า ch คิอช่องว่างขาว (space, newline, tab )
ตัวอย่าง: c = isspace(ch); // คืนค่า TRUE ถ้า ch = ‘\n’ คืนค่า FALSE ถ้า ch=‘m’
คำสั่ง: tolower(ch);
การใช้งาน: คืนค่าตัวพิมพ์เล็กจากค่าอักษรในตัวแปร ch ถ้าเป็นไปได้
ตัวอย่าง: c = tolower(ch); // คืนค่า ‘m’ ให้ c ถ้า ch=‘M’
คำสั่ง: toupper(ch);
การใช้งาน: คืนค่าตัวพิมพ์ใหญ่จากค่าอักษรในตัวแปร ch ถ้าเป็นไปได้
คำสั่ง: c = toupper(ch); // คืนค่า ‘M’ ให้ c ถ้า ch=‘m’


*หมายเหตุ งานเขียนชิ้นนี้ ได้รับการคุ้มครองสิทธิตามพระราชบัญญัติคุ้มครองสิทธิทางปัญญา โดยลิขสิทธิเป็นของผู้เขียน ที่ให้เกียรตินำเผยแพร่ผ่าน วิชาการ.คอม เรามีความยินดีและอนุญาตให้ทำซ้ำหรือเผยแพร่ต่อเพื่อประโยชน์ทางการศึกษาเท่านั้น กรุณาให้เกียรติผู้เขียน โดยอ้างชื่อผู้เขียนและ วิชาการ.คอม (www.vcharkarn.com) ทุกครั้งที่ทำการเผยแพร่ต่อ ห้ามนำส่วนหนึ่งส่วนใดไปเผยแพร่ต่อในสื่อที่เอื้อประโยชน์ทางธุรกิจก่อนได้รับอนุญาต ขอขอบคุณที่ร่วมกันช่วยสร้างให้สังคมไทยเป็นสังคมแห่งปัญญา



จำนวน 36 ความเห็น, หน้า่ | 1| -2-
ความเห็นเพิ่มเติมที่ 19 19 ธ.ค. 2550 (20:29)
ตอบ ค.ห. ที่ 18 อ่ะคับ
ที่คอมไพล์ไม่ผ่านก็คงจะมาจากการเขียนรูปแบบของโปรแกรมผิด
ซึ่งอันที่จริงมันก็คงจะเป็นแค่เส้นผมบังภูเขาอยู่เท่านั้นแล
ค่อยๆหาจุดผิดพลาดนะคับ แล้วความผิดพลาดในคร้งนี้จะทำให้คุณจำมันจนขึ้นใจ

เป็นกำลังใจให้คับ
monoil เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 150 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 20 22 ธ.ค. 2550 (12:17)
ความเห็นที่ 18 นั้น ที่เขียนไม่ผ่าน อยู่บรรทัดแรกเลยครับ

#include
ตามจริงจะต้องเป็น
#include<ชื่อไดเรกทอรี่>

ชื่อไดเรกทอรี่ ก็มีเยอะ แต่ที่สำคัญที่สุดก็ stdio.h
ส่วนอื่นๆก็ยังมีอีกเยอะ ลองใช้ help ใน Turbo C ดูครับ (แบบDosนะ)
แบบDos จะใช้ง่ายที่สุดแล้ว ที่ผมเขียนมา
Runa-Light เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 3 ครั้ง - ได้รับดาวแล้ว 153 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 21 24 ธ.ค. 2550 (23:19)
เขียนโปรพอได้บ้างครับแต่ติดที่ภาษาแบบ งง ม๊ากมากทำงัยดี
kuaeang เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 2 ครั้ง - ได้รับดาวแล้ว 150 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 22 30 ธ.ค. 2550 (23:11)
ขอบคุณมากๆครับ เพิ้งหัดศึกษา
mokullas เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 150 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 23 10 ม.ค. 2551 (04:00)
คห ที่ 14
ใช้ software จาก หุ่นยนต์นั้นแหละ ง่ายที่สุด ครับ
เพราะผมก็ทำเหมือนกัน มันก็ละเอียดเช่นกันครับ
ปัญหาของหุ่นยนต์อยู่ที่ตัวแปรของอุปสรรคที่ไม่คงที่ครับเช่น

กำหนดให้ แสงน้อยเดินซ้าย ปรากฏว่า บริเวณนั้น มีหลอดไฟส่องอยู่ไม่ตรงตามที่กำหนดไว้
หุ่นยนต์ก็ผ่านไปครับ

เล็งแม่นๆ ตั้งค่าให้กว้างที่สุดเท่าที่จะทำได้
สำคัญอีกส่วนการออกแบบ ครับต้องให้เซ็นเซอร์ เสถียรไว้ก่อน ไม่โยกไปมา เพราะอ่านค่าแปลกไปครับ

ผมลองมาแล้ว ถ้าแสงบนสนามไม่เสถียรแล้วไม่แก้ไขหละก้อ


ดวงล้วนๆ ครับ
sarawut_t3 เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 5 ครั้ง - ได้รับดาวแล้ว 130 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 24 21 ก.พ. 2551 (10:38)
เติมตัวเลขเข้าไป ๒ จำนวน แล้วรายงานได้ว่าตัวเลขนั้นเท่ากันหรือไม่เท่ากัน
เขียนอย่างไรครับ
Supachai08 เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 80 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 25 16 มี.ค. 2551 (10:15)
81503

ต้องขอขอบคุณเป็นอย่างมากเลยครับ ผมเคยเรียนมานานมากแล้ว ไม่รู้ว่าในสมองจะเหลือความจำบ้างหรือเปล่า ขอบคุณอีกครั้ง


flyingpig เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 70 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 26 31 มี.ค. 2551 (15:56)
ก็น่าสนใจน๊ะครับ แต่ถ้ายังไงผมแนะนำให้ไปดูเพิ่มเติมที่

citecclub.org แล้วจะได้อะไรเพิ่มขึ้นอีกมายมายมากกว่าที่คุณคิดน๊ะครับ

แค่คุณคิดจาสมัครก็ไม่ธรรมดาแล้ว แต่เนื้อหาแน่นน่าชมอย่างงมาก

เชื่อว่าคุณๆ จะต้องไม่ผิดหวังครับ
Os เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 150 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 27 23 เม.ย. 2551 (15:21)

ขอบคุณมากครับ


tonisgod เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 50 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 28 15 พ.ค. 2551 (01:24) คุณ ช่วยแจ้งลบความเห็นนี้แล้ว ขอบคุณค่ะ

ขอบคุณมากค่ะ ได้ความรู้มากเลย


ตอนนี้มีเรียนเรื่องนี้อยู่แต่เพิ่งเปิดเทอมยังไม่ได้ซื้อหนังสือเลยค่ะ ><"


NicoRobin เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 49 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 29 17 พ.ค. 2551 (13:08)

ไม่เคยเข้าไปชมเว็บ ก็ดีครับ


 


yutsongsri เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 2 ครั้ง - ได้รับดาวแล้ว 50 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 30 17 พ.ค. 2551 (13:26)

ช่วยแนนำตัวprogram run ภาษา ซี


 


yutsongsri เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 2 ครั้ง - ได้รับดาวแล้ว 50 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 31 20 พ.ค. 2551 (12:19)

ตอบคำถาม นะครับ


คำถามที่ 16 ภาษา C เป็นภาษาโครงสร้างครับ  แต่ java ถ้าจะให้ถูกหลักต้องเขียนเป็น OOP ครับ


คำถาม 17  ตัวแปรเกิดจากผู้เขียน สร้างขึ้นมาเองนะครับ ดังนั้น การสร้างขึ้นมาผู้เขียนโปรแกรมต้องจำได้สิครับ  ที่คุณว่าหมายถึงคำสั่งป่ะครับ


คำถามที่ 18   คุณเขียนแค่นั้นไม่ได้หรอกครับ  คุณต้องใช้ <Stdio.h> ตามหลัง include ด้วยครับ เพราะคุณมีการเรียกใช้ คำสั่งในการแสดงผล printf


คำถามที่ 30 ตัวโปรแกรม TC3  ครับ หรือ Turbo C++ ก็ได้   TC3 นี่ไม่ต้อง install  Copy ลงไปแล้วเซ็ตาค่านิดหน่อยใช้ได้เลย   ส่วน Turbo C++ install ใช้เหมือนโปรแกรมทั่วไป


goah เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 50 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 32 4 มิ.ย. 2551 (10:19)
การรัน คอมไพเลอร์ ระบบ boardland และระบบ turbo c อันไหนดีก่ากันคับ
dangza เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 2 ครั้ง - ได้รับดาวแล้ว 50 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 33 4 มิ.ย. 2551 (10:44)

ผมก็เพิ่งเคยเขียนภาษา C


ผมจะลองเขียนให้ดูง่ายๆนะคับผิดตรงไหนก็ต้องขอโทษด้วยจริงๆ


#include<stdio.h>


void main()


{


int num1,num2,num3;


char[20] no1;


printf("\t\t\t\============\n");


printf("\t\t\t\t\TEST\n");


printf("\t\t\t\============\n");


printf("NUMBER 1 : ");


scanf("%d",num1);


printf("PLEASE + - * / ");


scanf("%d",no1);


printf("NUMBER 2 : ");


scanf("%d",num2);


{


if no1="+"


printf("ANSWER IS : ",num1+num2);


elseif no1="-"


printf("ANSWER IS : ",num1-num2);


elseif no1="*"


printf("ANSWER IS : ",num1*num2);


else


printf("ANSWER IS : ",num1/num2);


}


ผมว่าน่าจะผิดเยอะช่วยหาที่ผิดหน่อยนะคับ


 


 


dangza เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 2 ครั้ง - ได้รับดาวแล้ว 50 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 34 5 มิ.ย. 2551 (13:39)

 


ผมเด็กใหม่ แต่อยากเรียนภาษา c คับ ช่วยสอนผมหน่อยอยากเขียนโปรแกรมเป็นคับ "."


bn456789 เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 2 ครั้ง - ได้รับดาวแล้ว 48 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 35 9 มิ.ย. 2551 (16:34)

กระผมขอขอบคุณเป็นอย่างมากๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆ


ถ้ากระผมเข้าใจกระผมจะไม่ลืมพระคุณเลยขอรับ


ma-chelsea เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 2 ครั้ง - ได้รับดาวแล้ว 50 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 36 9 มิ.ย. 2551 (16:41)

กระผมพึ่งสมัคใครที่เขียนโปรแกรมเป็นกรุณาสอนหน่อยส่งไปที่ apinanchelsea@Gmail.comนะคราบ


ma-chelsea เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 2 ครั้ง - ได้รับดาวแล้ว 50 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 37 17 มิ.ย. 2551 (16:55)

สวัสดีครับพี่ๆช่วยผมหน่อยนะครับ   ผมอยากเขียนภาษา c  


เป็นครับ audsadee@hotmail.com


 


bn456789 เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 2 ครั้ง - ได้รับดาวแล้ว 48 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 38 17 มิ.ย. 2551 (23:32)
<P>#include&lt;stdio.h&gt;</P>
<P>#include&lt;conio.h&gt;</P>
<P>main(){</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Hello\nMy name is DotA.\n");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //printf();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Good Bye");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;</P>
<P>พอได้ป่าวคับ :)</P>
DotA (IP:202.149.25.225)


กรุณา login เพื่อ comment งานเขียนนี้

???? สมัครสมาชิก ฟรี ตลอดชีพ


vmaster
(vmaster)

ผู้ชมข้อมูลนี้แล้ว 43,735 ครั้ง
เป็นสมาชิก: นานกว่า 7 ปี
แบ่งปันความรู้ 38 ครั้ง
ได้รับดาว 241 ดวง

โหวตเพิ่มดาว


บทความอื่น

การเขียนโปรแกรมภาษา C เบื้องต้น (Introduction to C Programming) [212,081]
?????? 0 ?????? ?? ??????????????????

บทความแนะนำ

การเกิด สึนามิ [537,173]
GMO พันธุวิศวกรรมศาสตร์ นางฟ้า หรือ ซาตาน [397,986]

Blog แนะนำ

วิชาการ.คอม ขอแนะนำงานเขียนชิ้นนี้ นำชัย ชวนคิด ฝัน และสรรค์สร้างสังคมไทย ด้วยวิทยาศาสตร์ เทคโนโลยี และธรรม [414,300]
Global Warming { English } [158,412]

Hot Links

คลังข้อสอบ | ข่าววิชาการ
เล่นกล/เกม | อ่านนิยาย
ข่าวทุนการศึกษา | ลิงค์

ขอบคุณผู้สนับสนุน

Google
 
ติดต่อลงโฆษณา :   คุณอันนา 081 4965363
สำนักงาน :   02 2015735
อีเมล์ :   
Copyright© 2000-2007, Vcharkarn.Com. All rights reserved.
คลิ๊กเพื่อดูสถิติ
รับรองและสนับสนุนโดย

สสวท.

มูลนิธิ พสวท.

พสวท.