الدرس 9 : دوال الإدخال و الإخراج في لغة C
- التفاصيل
- الزيارات: 19045
في هذا الدرس سنتعرف على دوال جديدة مختلفة كثيراً عن الدرس السابق ... سنتعرف الآن على دوال مختصة في الإدخال و الإخراج I/O:
	أولاً:
	 دالة الإخراج :
| printf( ); | 
طبعاً هذه الدالة من الدوال الأساسية جداً في لغة السي لا أعتقد أن هناك من يجهلها و هذه الدالة تأخذ متغر إلى متغيرين .
	
	الأول يكون دائم من نوع سلسلة حرفية و المتغير الاول إجباري , أما المتغير الثاني فهو غير إجباري و يكون من نوع va_list طبعاً هو ليس من الأنواع القياسية
في لغة سي و لكنه مفيد جدا في أن الدالة تأخذ عدد غير محدد من القيم مثل ما يحصل مع الدالة printf و scanf و لكن عمل هذا النوع معقد جداً
و لن أتطرق له هنا ...المهم لو اردنا أن نطبع الجملة التالية :
Hi I am Talal
ما علينا إلا كتابة الآتي:
| printf ("Hi I am Talal"); | 
ولكن ماذا لو أردنا أن نكتبها هكذا:
	Hi I am
	Talal
سوف نكتبها هكذا :
| printf ("Hi I am \nTalal"); | 
	لاحظ هنا وجود علامة الـ n\ وهي تعني new line ( سطر جديد )
	وهناك الكثير من العلامات التي تؤدي اغراض معينة مثل:
	1. نقل المؤشر 8 مسافات و نستخدم لذلك علامة t\ .
	2. إخراج صوت الصافرة ( بيب ) , ونستخدم العلامة a\.
	3. إرجاع المؤشر مسافة خلفية و نستخدم لذلك b\ .
	ولكن ماذا لو اردت أن نطبع العلامة \ ؟!؟
	الحل هو كتابتها كالتالي:
| printf ("Hi I am \\ Talal"); | 
سنلاحظ أن المخرج على الشاشة هو :
Hi I am Talal
	والحال ايضاً نفس الشئ مع الـ ؟ و الـ ' و الـ "
	فما عليك إلا كتابتها مرتين ؟؟ و "" و ' ' .
ولنرى الان هذا البرامج على السريع :
| 
					#include "stdio.h" 
					c = a + b ; | 
لاحظ أن المخرجات ستكون بالشكل التالي :
| The int c = 15 The float f = 45.5 The char ch = Y The string name = Talal | 
	لاحظ أن %d تكون توصيف لمتغير من نوع int ,
	و الـ %f تكون لتوصيف متغير من نوع float ,
	والـ %c تكون لتوصيف متغير من نوع char أي حرف واحد ,
	والـ %s تكون لتوصيف متغير من نوع string حرف أو أكثر .
	ثانياً:
	 دالة الادخال
| scanf ( ) ; | 
	وهي دالة لإدخال أي نوع من أنواع الـ Data Type .
	وممكن نشوف هذا المثال و يكون كافي :
| #include "stdio.h" main ( ) { int a ; char string[20] ; printf ("\nEnter an int VALUE: ") ; scanf ("%d",&a) ; printf ("nEnter a string: ") ; scanf ("%s",string) ; printf ("The int value is:%d ,,, the string is:%s\n", a, string) ; return 0 ; } | 
	لنلقي نظرة على البرنامج بسرعة :
	في الأول عرفنا متغيرين الاول من نوع int و الثاني من نوع char
	وهي مصفوفة لأن الجمل في السي هي عبارة عن مصفوفة من نوع char .
	ثم طبعنا عبارة تطلب من المستخدم إدخال قيمة من نوع int
	ثم إستخدمنا الدالة scanf لإدخال هذه القيمة في المتغير a ,
	لاحظ أننا كتبنا a& وليس a و هذا مطلب اساسي لجميع المتغيرات
	ماعدا نوع string , وهذا موضوع في الـ Functions يسمى
	Call By reference. وذلك لأن قيمة a ستتغير بعد ما نستدعي هذه الدالة .
	ثم قمنا بطلب آخر من المستخدم و هو إدخال جملة و لكن هذه المرة لم نقم بكتابة string& لماذا ؟
	لأن المصفوفة في السي عبارة عن مؤشر Pointer و علامة * مع علامة & لا تكتب .
	ثم في السطر الأخير طبعنا القيموة a و قيمة المصفوفة string .
	- تذكر هذا المثال جيداً لأننا سوف نقوم ببعض المقارنات بين الدالة scanf و دالة أخرى سنراها في هذا الدرس .
	ثالثاً:
	 دوال الإدخال
| 
					1. getchar ( ) ; | 
	وهذه دوال إدخال حرف واحد و هي متشابهه في الشكل و لكن مختلفة في الأداء نوعاً ما .
	الدلة الأولى : getchar توجد ضمن ملف التوجية stdio.h و تستخدم لإدخال حرف واحد ويظهر على الشاشة بعد الكتابة ولا ينتقل إلى الأمر الذي بعده إلا إذا ضغط المستخدم على مفتاح Enter .
مثال:
| char ch ; ch = getchar() ; printf ("%c",ch) ; | 
	
	الدلة الثانية : getche وتوجد ضمن ملف التوجية conio.h و تستخدم ايضاً لإدخال حرف واحد و يظر على الشاشة إلا أنها تختلف عن الدالة getchar في أنها لا تحتاج الضغط على مفتاح Enter للإنتقال للأمر التالي...
	مثال:
| 
					char ch ; | 
	
	الدالة الثالثة : getch ( محبوبتي :D ) وتوجد ضمن ملف التوجية conio.h ومع هذه الدالة الأمر مختلف عن الدالتين السابقتين, فالدالتين
	السابقتين كان الحرف يظهر على الشاشة و لكن هنا لا يظهر و لا يطلب من المستخدم الضغط على مفتاح Enter للإكمال .
	مثال :
| 
					char ch ; | 
	
	طبعاً أولاً نفذ هذه الدوال الثلاث و ضعها في برنامج .
ثم لنرى فائدة من فوائد الدالة الأخيرة getch إذا كنت من مستخدمي منتجات بورلاند فلابد من أنك قد مملت ان ينفذ البرنامج
و عند الإنتهاء منه تضغظ على مفتاحي Alt + F5 لترى آخر النتائج , الدالة getch تحل لك هذه المشكلة كل ما عليك هو ان
تكتب في نهاية الدالة main الجملة التالية
| getch(); | 
و جرب و سترى ان هذا يحل لك الاشكال ... ;)
	و هذا أيضاً إذا كنت تريد ان تري المستخدم شئ و ستمسح الشاشة بعدها
	ماهو الحل بالتأكيد الدالة getch و بعدها قم بمسح الشاشة .
	- مسوي دعاية لهالدالة كأنها متنج تلفزيوني أبغا أبيعه – :D .
	
	وتستخدم هذه الدالة أيضاً في حركات كتابة أرقام السر لأنه ليس من
	المفروض ان يرى المستخدم رقمة السري ولا لا ؟!؟ ;)
	رابعاً:
	 دالة الإدخال gets :
	توجد هذه الدالة ضمن ملف التوجية stdio.h , و تستخدم في إدخال عبارة حرفية -string- وتستخدم كالتالي:
| gets ( str ) ; // str is type of array of char …. | 
لنرى المثال التالي :
| 
					#include "stdio.h" | 
طبعاً يوجد في البرنامج دالة جديدة علينا وهي الدالة puts وهي نفس الدالة gets ولكن puts للإخراج , وتستخدم كما في المثال .
ولكن نفذوا البرنامج السابق وبدل من الجملة
| gets (name); | 
ضعوا :
| scanf ("%s",name) ; | 
	ثم قم بإدخال إسمك كاملاً لنقل ثلاثياً و لاحظ المخرجات !!!
	ستجد أن المطبوع هو إسمك الأول فقط و ذلك بسبب أن الدالة scanf
	تقراء حتى يواجهها أول فراغ فتتوقف عن القرائة !! إذا ما هو الحال ؟!
	الحل هو إستخدام الدالة gets جرب و لاحظ النتائج بنفسك .
	التجربة خير برهان .
وأيضاً هناك دوال مشايهه سأذكرها على عجالة وهي :
| putchar (); | 
وهي مثل الدالة puts ولكن هذه لإخراج حرف واحد فقط فعندما نكتب :
| putchar ( 'a' ) ; | 
	يكون المخرج على الشاشة حرف a .
	وعندما تكتب الفقرة التاليه في برنامج :
| char ch ; ch = getchar () ; putchar(ch); | 
	وهذه الدالة موجوده في ملف التوجية stdio.h .
	وأختها putch ولكن موجودة في ملف التوجية conio.h ولها نفس المعاملات تماماً و تستخدم بنفس الطريقة .
المصدر : موقع c4arab.com (توقف الموقع من فترة )
 
                     
           
 









