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

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

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

Earthchie

 :30:  งงครับ

เราประกาศ int ให้กับตัวแปรไหน

และคืนค่าให้ตัวแปรไหนครับ

แล้วถ้่าสมมติเราใช้

int main(){
             
               float a,b,c ;
               a = 10 ;
               b = 3 ;
               c = a/b ;
               return 0 ;
}

ได้มั๊ยครับ (ฟังก์ชั่น main เป็น int แต่ตัวแปรเป็น float )

แล้วจบโปรแกรมปุ๊ป a,b,c จะเก็บค่าเป็น 0 หมดหรือเปล่าครับ (return 0)

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

REROYD

คืนให้ main() ครับ

ถ้้ามีหนังสือ ลองเปิดดูเรื่อง Function ครับ  :53:


เดี๋ยวหาตัวอย่างง่าย ๆ ก่อน  :42:

PiPoPiPi

#17
int main(){
             
               float a,b,c ;
               a = 10 ;
               b = 3 ;
               c = a/b ;
               return 0 ;
}

ได้มั๊ยครับ (ฟังก์ชั่น main เป็น int แต่ตัวแปรเป็น float )


int ตัวนี้เป็น prototype ของ ฟังก์ชั่นครับ ไม่เกี่ยวกับ ตัวแปร
นั่นหมายความว่า

ตัวแปรในฟังก์ชั่นจะมี data type เป็นอะไรก็ได้
แต่ return ต้อง เป็นชนิดเดียวกับ prototype ของฟังก์ชั่นจ้า

งงป่าวหว่า


แล้วจบโปรแกรมปุ๊ป a,b,c จะเก็บค่าเป็น 0 หมดหรือเปล่าครับ (return 0)

a,b,c จะมีค่าตามที่กำหนดไว้ครับ 10, 3, a/b ตามลำดับครับ
แต่ทุกครั่งที่เรียกฟังก์ชั่นนี้จะได้ 0 ครับ

แต่โดยปกติ จะไม่ค่อยให้มีกาีีร return ใน main นะครับ
ยุบสกา .. มาเป็น เร็กเก้ เร็กเก้ เร็กเก้ !!!!

REROYD


#include "stdio.h"
#include "conio.h"

int plus(num1,num2)
{
int ret;

ret = num1+num2;

return ret;
}                             


void main()
{

int a,b;
int result;

printf("\nEnter first number");
scanf("%d",&a);
printf("\nEnter second number");
scanf("%d",&b);

result = plus(a,b);

printf("Result = %d",result);

getch();

}


ลองเอาำไปรันดูครับ  :53:

PiPoPiPi

ตัวอย่างโปรแกรมของแบงก์คือ

ให้รับ Input ค่า a และ b
จากนั้นส่งเข้าฟังก์ชั่น plus
โดยมีค่า พารามิเตอร์คือ num1 และ num2
และชนิดของฟังก์ชั่นนี้คือ int

num1 จะมีค่าเท่ากับ a และ num2  จะมีค่าเท่ากับ b

ใน ฟังก์ชั่น plus นั้นจะนำค่า num1+num2 เก็บไว้ใน ret
จากนั้น ฟังก์ชั่น plus จะ return ค่า ret

นั่นหมายความว่า ค่าที่ได้มาจากฟังก์ชั่นก็คือ a+b นั่นเอง

ยุบสกา .. มาเป็น เร็กเก้ เร็กเก้ เร็กเก้ !!!!

Rabbitinblack

ให้คิดซะว่า ฟังก์ชัน plus เป็นตัวแปรก็ได้

ดังนั้นค่าที่ return กลับไป ก็ไปที่ตัวแปร plus อะไรแบบนั้น

ลุงซัน

#21
คำถามแรก เรื่อง clrscr
12. I am having problems using Borland specific functions such as clrscr()

Include conio.h to your source, and add C:\Dev-C++\Lib\conio.o to "Further Object Files" in Project Options (where C:\Dev-C++ is where you installed Dev-C++)

clrscr ไม่เป็น standard C
แต่ Dev-C++ เตรียม object file ไว้ให้ (conio.o)
ปกติการเขียน C จะเป็นตามนี้
1.เขียนบน IDE หรือ notepad ..etc -> editor
2.สั่ง compile จะไม่ได้ file excutable
แต่ได้ object file (.o) ไฟล์เหล่านี่ส่วนของโปรแกรมของเราจะถูกแปลแล้ว แต่ยังไม่รวมกับ library ต่างๆ
3. link
รวมไฟล์ที่เราเขียนกับ library (ใน header ที่มี include นั้นแหละ)
ซึ่ง standard library ที่ผ่านการ compile แล้ว ก็มีนามสกุล .o เหมือนกัน

สรุปใน FAQ ก็คือ
1.ให้ include conio.h เพื่อให้ใช้ clrscr ได้
2.ต้องเอา library (conio.o) มาไว้ใน project เรา ไม่งั้นเวลา link จะหาไม่เจอ
-------------------------
ส่วนเรื่อง return 0 รู้สึกจะพากันเข้าป่าไปเรื่อยๆ(เฉียวทางออกถนนนิดเดียว)

ก่อนจะพูดเรื่อง return 0 ใน function main()
เราต้องรู้ว่า C ใช้แนวคิดว่า everything is functions เพราะฉนั้นทุกๆอย่างใน C มองเป็น function
ถ้ามีการประมวลผลเราจะส่งผลลัพท์กลับไปหาผู้เรียกโดยใช้ return (ด้วยค่าประเภทของ function เช่น int functionx(...))
ส่วนที่เราเขียนหน้า function เป็น int แล้ว return เป็นทศนิยม หลายคนก็คงเคยทำ lab อันนี้(โดนตัดทศนิยม)
---------
main() ก็เป็น function
แล้ว main() ใครเรียก?
ก็ระบบปฏิบัตการไง(OS)
แล้ว return 0 คือ?
ก็ OS เรียก ก็บอก OS ว่าจบด้วยไม่มี error (return 0)
ดังนั้นจะจบโดยบอก(return 0) หรือไม่บอกก็ได้(ไม่ต้องมี return 0)
note:อาจารย์ท่านพาเข้าป่าไปอีกคน
-----------
แล้ว main() ส่งกลับเป็น return 1, 2...n มีไหม?
คำตอบคือมี
หลัง return เราเรียก error code
เราจะใช้กรณี
1.ใช้แสดงว่าโปรแกรมทำงานถูกต้อง(return 0) หรือมีข้อผิดพลาดอะไรไหม (return x)
ใช้ bat file แสดงว่าจบสมบรูณ์หรือไม่
2.ประยุกต์(apply)กับ bat file ที่เป็นเมนู
เมื่อก่อน(ถ้าใครแก่พอ)บางครั้งเราจะเห็นว่า boot เครื่อง เข้า autoexec.bat จะขึ้นเมนูมาให้เรา
เราจะเขียนโปรแกรมเล็กๆ(scanf)แล้วส่ง error code ออกมาเป็นเมนูที่เลือก
ตัวอย่างเช่นนี่ -> ไอ้เจ้า blat บรรทัดที่ 2 เป็นของเขาที่เราเขียนเองได้
http://www.thaibuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย

REROYD

#22
ขอบคุณลุงซันครับ +  :46:




แต่เขียน Batch file แบบเป็นเมนู นี่ผมทันนะ ที่ใช้ choice กับ if errorlevel เนี่ย  :53:
.
.
.
นี่ตูแก่แล้วเหรอเนี่ย  :05:

ต้น

ผมก็ทันนะ  แก่เหมือนกันหรือนี่  :05:

ลุงซัน

อ้างคำพูดจาก: แบงก์ [19] เมื่อ 09 ส.ค. 2008, 22:55 น.
นี่ตูแก่แล้วเหรอเนี่ย  :05:
เกิดมาก็แก่กว่าคนที่พึ่งเกิดแหละครับ
จริงๆผมนึกถึงเมนูใน CD ก็ใช้เทคนิคนี่
สรุปว่าปัจจุบันก็มี ผมก็แก่เอง(ที่ลืมไปว่ายังมีใช้อยู่)  :53:
http://www.thaibuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย

ยุนเอ

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

PiPoPiPi

แสดงว่าผมยังเด็ก  :22:
ยุบสกา .. มาเป็น เร็กเก้ เร็กเก้ เร็กเก้ !!!!

ลุงซัน

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

main () { }

void main (){ }

int main () { }

มันต่างกันยังไง (ปกติใช้ main เฉยๆ แต่หนังสือ my first book ANSI C ใช้ int main อาจารย์บางครั้งก็ใช้ void main)

ลืมอันนี้
ถ้าอ่านด้านบนของผมจะรู้ว่า
main () { } = void main (){ } = ไม่ต้องส่ง return code กลับไประบบปฏิบัตการ
int main () { } = ส่ง return code กลับไประบบปฏิบัตการ

return 0; กับ return(0);
มันแล้วความถนัดและ compiler ส่วนมากจะเป็น return 0; (ส่วน return(0) จะออกมาในลักษณะของ function)
http://www.thaibuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย

ลุงซัน

อ้างคำพูดจาก: EaRthCh!E* เมื่อ 09 ส.ค. 2008, 21:05 น.
:30:  งงครับ

เราประกาศ int ให้กับตัวแปรไหน

และคืนค่าให้ตัวแปรไหนครับ

แล้วถ้่าสมมติเราใช้

int main(){
             
               float a,b,c ;
               a = 10 ;
               b = 3 ;
               c = a/b ;
               return 0 ;
}

ได้มั๊ยครับ (ฟังก์ชั่น main เป็น int แต่ตัวแปรเป็น float )

แล้วจบโปรแกรมปุ๊ป a,b,c จะเก็บค่าเป็น 0 หมดหรือเปล่าครับ (return 0)


return 0 ไม่เกี่ยวกับการคำนวณและตัวแปร(เลยไม่มีผลอะไร)

ืnote:
ผมลืมเรื่อง void ไปนิด
เห็นหลายคนเข้าใจว่า void คือไม่มีค่า ในภาษาคอมฯ ไม่มีค่าคือ null
แต่ void แปลว่า ละเว้น(ไม่ต้องมี) คือถ้าไม่ต้องการค่าอะไรกลับมาก็ใส่ void นำหน้า
(กันการเตือนของ compiler แค่นั้น ไม่งั้น compiler จะเตือนว่าคุณลืมอะไรหรือปล่าว เราจะได้บอกว่าไม่ได้ลืมโว้ย ตั้งใจ มีอะไรหรือหรือปล่าว?->พูดกับ compiler)  :43:
http://www.thaibuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย

ยุนเอ

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

SMF 2.1.7 © 2026, Simple Machines