ถกปัญหาภาษาซี

เริ่มโพสต์โดย Earthchie, 09 ส.ค. 2008, 17:01 น.

0 สมาชิก และ 1 บุคคลทั่วไป กำลังเปิดอ่านโพสต์นี้

Earthchie

แจ่มแจ้งเลยครับ  :25:

ขอบคุณครับ




แต่ติดงงๆตรงที่

return ครับ ช่วยขยายคำว่า ค่า error ให้หน่อยครับ (กรณี return  0 พอเข้าใจแล้วครับ) แต่ถ้าเป็น 1,2,3...,n นี่มันคือยังไงครับ
ชื่อ Earth ครับ เรียกเอิดก็ได้ | Earthchie's Blog

ลุงซัน

อ้างคำพูดจาก: EaRthCh!E* เมื่อ 10 ส.ค. 2008, 00:59 น.
return ครับ ช่วยขยายคำว่า ค่า error ให้หน่อยครับ (กรณี return  0 พอเข้าใจแล้วครับ) แต่ถ้าเป็น 1,2,3...,n นี่มันคือยังไงครับ
1.ถ้าต้องการส่งให้ OS ตรงกับ error code ของ OS เรามักจะใช้ error code ของ DOS
http://www.computerhope.com/xdoseror.htm
http://heim.ifi.uio.no/~stanisls/helppc/dos_error_codes.html
แต่จริงๆเรามักไม่ใช้ เราไปใช้กรณีที่ 2-3 แทน
2. error code เราเอง เช่น
ตั้งว่า error=1 เป็น ออกกลางคัน(ทำงานไม่จบ ..etc)
3.ใช้สำหรับ bat ไฟล์ (เขียนเมนู) -> ใช้อันนี้มากสุด
เช่่น
error code =0 -> เมนูแรก
error code =1 -> เมนูสอง
error code =2 -> เมนูสาม
...
..
.
ตัวอย่างก็ของ blat ที่ผมกล่าวไปข้างต้น
-----------
สรุป
1.ถ้าสนใจ C(++) ก็อย่าไปยุ่งกับมันเลยครับ
เอาแค่ return 0 พอ (จบปกติ)
ถ้าจบไม่ปกติก็ return 1
(แต่ก็ไม่ได้เอาไปใช้อะไร ยกเว้นเราต้องเขียนโปรแกรมเช่น bat file เพื่อ check error code)
2.จะจบด้วย return 0 หรือไม่มีก็ได้ (ก็ไม่ได้เอาไปใช้อะไร)
แต่เพื่อความสบายใจว่าหลังจากจบโปรแกรมแล้วแจ้งให้ OS ทราบว่าไม่มีข้อผิดพลาดใดๆก็ return 0

http://www.thaibuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย

Earthchie

อ๋อๆครับ อ่านไม่ละเอียดเอง  :30:

ขอบคุณครับ เข้าใจละครับ  :46:
ชื่อ Earth ครับ เรียกเอิดก็ได้ | Earthchie's Blog

กวางจ้ะ

เกิดทันภาษาซีแต่เข้ากรุหมดแล้ว  :05:

WuTtY

อ้างคำพูดจาก: ลุงซัน เมื่อ 10 ส.ค. 2008, 03:20 น.
1.ถ้าต้องการส่งให้ OS ตรงกับ error code ของ OS เรามักจะใช้ error code ของ DOS
http://www.computerhope.com/xdoseror.htm
http://heim.ifi.uio.no/~stanisls/helppc/dos_error_codes.html
แต่จริงๆเรามักไม่ใช้ เราไปใช้กรณีที่ 2-3 แทน
2. error code เราเอง เช่น
ตั้งว่า error=1 เป็น ออกกลางคัน(ทำงานไม่จบ ..etc)
3.ใช้สำหรับ bat ไฟล์ (เขียนเมนู) -> ใช้อันนี้มากสุด
เช่่น
error code =0 -> เมนูแรก
error code =1 -> เมนูสอง
error code =2 -> เมนูสาม
...
..
.
ตัวอย่างก็ของ blat ที่ผมกล่าวไปข้างต้น
-----------
สรุป
1.ถ้าสนใจ C(++) ก็อย่าไปยุ่งกับมันเลยครับ
เอาแค่ return 0 พอ (จบปกติ)
ถ้าจบไม่ปกติก็ return 1
(แต่ก็ไม่ได้เอาไปใช้อะไร ยกเว้นเราต้องเขียนโปรแกรมเช่น bat file เพื่อ check error code)
2.จะจบด้วย return 0 หรือไม่มีก็ได้ (ก็ไม่ได้เอาไปใช้อะไร)
แต่เพื่อความสบายใจว่าหลังจากจบโปรแกรมแล้วแจ้งให้ OS ทราบว่าไม่มีข้อผิดพลาดใดๆก็ return 0



โดยทั่ว ๆ ไปนะครับ การ return ค่าออกจาก main หรือ function ใด ๆ ก็ตาม ถ้าเป็น c เท่าที่นิยมแล้วนึกออก
1. error จะ return เลขจำนวนเต็มที่เป็น - เช่น -1, -2 แล้วแต่ case ที่ต้องการแยก และถ้าทำงานได้ตามปกติเป็นเป็นเลข +
2. ถ้ามี case หลาย ๆ แบบ แบบที่ handle ได้และ handle ไม่ได้ ก็มักจะรวมที่ handle ไม่ได้เป็นอันเดียวกัน และแยกที่ handle ได้ออกไป
3. บางทีการ return ก็ไม่ได้ return แค่บอกว่าทำงานสำเร็จหรือไม่สำเร็จเท่านั้น อาจจะ return ข้อมูลออกมาเช่น พวกนับ string, trim พวกนี้อาจจะ return ความยาวถ้าสำเร็จ และเป็นเลข - ถ้า error

จรงิ ๆ พวกนี้ไม่มีกฏตายตัว เพียงะแต่ว่าเขียนให้คนเีขียนเองและคนอื่นเรียกใช้ได้ไม่สับสนก็พอ

ลุงซัน

ที่ผมกล่าวไปเฉพาะ main()
อ้างคำพูดจาก: EaRthCh!E* เมื่อ 10 ส.ค. 2008, 00:59 น.
return ครับ ช่วยขยายคำว่า ค่า error ให้หน่อยครับ (กรณี return  0 พอเข้าใจแล้วครับ) แต่ถ้าเป็น 1,2,3...,n นี่มันคือยังไงครับ

อ้างคำพูดจาก: EaRthCh!E* เมื่อ 09 ส.ค. 2008, 20:23 น.
return 0; คืออะไรครับ
ถามอาจารย์เค้าบอกว่า มันต้องมีทุกครั้งที่จบโปรแกรม ความหมายแค่เตือนให้มันรู้ว่าจบโปรแกรมแล้วแค่นั้น  :09:
เพราะเห็นต้องการตัวอย่างของ error code และเป็นการตอบต่อเนื่องที่อาจารย์ท่านอธิบายเรื่องการจบโปรแกรม
จึงไม่เกี่ยวกับ function ปกติ(ซึ่งมีอยู่หลากหลายว่าต้องการประมวลผลเรื่องอะไร)
แต่ที่อธิบายส่วนมากจะไป function
เดี๋ยวจะสับสนเท่านั้นครับ เพราะเรื่องนับ string,trim ..etc แม้จะใช้ function แต่นิยมแสดงผลบนจอ(ไม่ส่งมาที่ OS)
http://www.thaibuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย

กากก่อเกรียนนู้บ

เรียนเรื่อง ฟังก์ชั่น แล้วก็ Prototype หรือยังครับ ถ้าเรียนแล้วเดี๋ยวผมมาช่วยอธิบายให้  :12:

Earthchie

เพิ่งเริ่มครับ (เรียนได้คาบเดียว)

เริ่มที่สร้างฟังก์ชั่นเองอยู่ครับ

แล้วอาจารย์ก็หยุด แล้วไปสอนเรื่องการแรนดอมเลขครับ





ตอนนี้มีคำถามเรื่องการแรนดอมเลขครับ

ผมต้องการสุ่มเลขสองตัวครับ (ที่ช่วงเท่ากัน)

เช่น

int a,b;

srand(time(null));

a = 1 + (int)rand()%100 ;
b = 1 + (int)rand()%100 ;


แต่ส่วนใหญ่แล้วเนี่ย a จะ มีค่าเท่ากับ b

คิดว่าสาเหตุมาจาก srand(time(null)); (ถูกต้องมั๊ยครับ) เพราะเอาเลขมาจากแหล่งเดียวกัน (ใช่ clock ของ cpu หรือเปล่าครับ)

ถ้าเราอยากให้(ส่วนใหญ่) สุ่มเลขออกมา a ไม่เท่ากับ b จะทำไงดีครับ


ชื่อ Earth ครับ เรียกเอิดก็ได้ | Earthchie's Blog

Earthchie

เบิล เนื้อหา ซูโดโค้ด

ทำสรุปก่อนสอบ แต่ขายดี ถ่ายเอกสารกันใหญ่ เลยพิมพ์ใส่ word เลย

เผื่อใครอยากได้ครับ

http://earthchie.samooclub.com/images/stories/basic_c.doc
ชื่อ Earth ครับ เรียกเอิดก็ได้ | Earthchie's Blog

REROYD

#39
Random เลขสองหลักเคยทำเป็นการบ้านตอนเรียนปี 1  :53:

แต่ใช้แค่ ประกาศ randomize(); แล้วสั่ง random(); เลย

ยังไงเอาไอ้นี่ไปศึกษาดู  :53:



ป.ล. ตอนนั้นมาถามลุงซันเรื่อง Arrays ด้วย  :53:

ป.ล.2 ใช้ BC 3.1 for DOS compile นะ ไม่งั้น Error บานเบอะ  :37:


Earthchie

#40
เอ่อ อาจารย์ผมเค้าให้ประกาศเฮดเดอร์ไฟล์ time.h

จะได้เอามาใส่ในคำสั่ง

srand(time(null));

ในที่นี้

randomize();  =   srand(time(null));

หรือเปล่าครับ

หรือความหมายเีดียวกันแต่  srand(time(null)); ดึงเวลามาจาก clock ของ cpu แต่ randomize(); ไม่ใช่

ป.ล. ไปลองก่อน ขอบคุณครับ




ลองมาแล้ว

randomize(); ไม่ใช่คำสั่งมาตรฐานใช่มั๊ยครับ

อย่างนี้นี่เอง

พอจะมีคำสั่งมาตรฐานมั๊ยครับ
ชื่อ Earth ครับ เรียกเอิดก็ได้ | Earthchie's Blog

REROYD

คำสั่งมาตรฐานไม่ทราบครับ ตอนเรียน อ. ยึด Borland C เป็นมาตรฐาน  :05:


ยังไงเดี๋ยวลองไปคุ้ยดูก่อน  :42:

Earthchie

แหะๆ ขอบคุณครับ

พอดีผมเรียน dev c++ เลยจะใช้ส่งงานไม่ได้ครับ

จริงๆไม่ต้องก็ได้ครับ ไม่ได้ซีเรียสขนาดนั้น แค่สงสัยเฉยๆครับ

แต่ก็ขอบคุณครับ  :46:
ชื่อ Earth ครับ เรียกเอิดก็ได้ | Earthchie's Blog

กากก่อเกรียนนู้บ

อ้างคำพูดจาก: EaRthCh!E* เมื่อ 12 ส.ค. 2008, 16:03 น.

ตอนนี้มีคำถามเรื่องการแรนดอมเลขครับ

ผมต้องการสุ่มเลขสองตัวครับ (ที่ช่วงเท่ากัน)

เช่น

int a,b;

srand(time(null));

a = 1 + (int)rand()%100 ;
b = 1 + (int)rand()%100 ;


แต่ส่วนใหญ่แล้วเนี่ย a จะ มีค่าเท่ากับ b

คิดว่าสาเหตุมาจาก srand(time(null)); (ถูกต้องมั๊ยครับ) เพราะเอาเลขมาจากแหล่งเดียวกัน (ใช่ clock ของ cpu หรือเปล่าครับ)

ถ้าเราอยากให้(ส่วนใหญ่) สุ่มเลขออกมา a ไม่เท่ากับ b จะทำไงดีครับ




ผมว่าน่าจะใช้ srand 2 รอบนะครับ จะได้ไม่เหมือนกัน

int a,b;

srand(time(null));
a = 1 + (int)rand()%100 ;
srand(time(null));
b = 1 + (int)rand()%100 ;


ยังไม่ได้ลองนะครับ ได้ไงบ้างไม่รู้  :03:

WuTtY

อ้างคำพูดจาก: ลุงซัน เมื่อ 11 ส.ค. 2008, 18:07 น.
ที่ผมกล่าวไปเฉพาะ main()เพราะเห็นต้องการตัวอย่างของ error code และเป็นการตอบต่อเนื่องที่อาจารย์ท่านอธิบายเรื่องการจบโปรแกรม
จึงไม่เกี่ยวกับ function ปกติ(ซึ่งมีอยู่หลากหลายว่าต้องการประมวลผลเรื่องอะไร)
แต่ที่อธิบายส่วนมากจะไป function
เดี๋ยวจะสับสนเท่านั้นครับ เพราะเรื่องนับ string,trim ..etc แม้จะใช้ function แต่นิยมแสดงผลบนจอ(ไม่ส่งมาที่ OS)


return สำหรับ main โปรแกรมมีที่ใช้อยู่เหมือนกันนะครับ เช่น การใช้ exec("โปรแกรม"); โดย exec จะเอาค่าที่ return จาก main โปรแกรมมาใส่ให้ ดังนั้น มองว่า main เป็น function ใหญ่ ๆ function นึงก็ได้ครับเวลาเรียนเรื่อง function แล้วจะไม่ได้งง

ส่วนเรื่อง rand() ใน C เนื่องจาก ภาษา C function rand() เป็น sudo random ครับไม่ใช่การ random จริง ๆ sudo random คือการเตรียมเลขไว้แล้ว 1 ชุด เ่ช่น 5 203 32 12 64 9 39 .... โดยมีขนาดเท่าไหร่ก็แล้วแต่ ไม่เกี่ยวกับคนเขียนโปรแกรมนะ ดังนั้นถ้าเราใช้คำสั่ง rand() โดยที่เราไม่ srand() ก็จะได้ค่าเดิมทุกครั้ง เพราะมันไปเอาค่าจากเลขที่เตรียมไว้แล้ว

srand() (seek random) คือการระบุว่าเราจะเริ่มใช้ตัวเลขตั้งแต่ตำแหน่งที่เท่าไหร่ในชุด sudo random ของ rand() ครับ โดย srand ก็จะรับค่ามาเป็นตำแหน่ง โดยทั่ว ๆ จะใช้เวลา ( function time() ) ในการ set เพราะง่ายที่สุด

SMF 2.1.7 © 2026, Simple Machines