دوال الإدخال و الإخراج في لغة سي
بسم الله الرحمن الرحيم
دوال الإدخال و الإخراج في لغة سي
في هذا الدرس سنتعرف على دوال جديدة مختلفة كثيراً عن الدرس السابق ... سنتعرف الآن على دوال مختصة في الإدخال و الإخراج 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"
main ( )
{
int a = 5, b = 10, c ;
float f = 45.5 ;
char ch = 'Y' ;
char name[10] = "Talal" ;
c = a + b ;
printf ("The int c = %d n",c) ;
printf ("The float f = %f n",f) ;
printf ("The char ch = %c n",ch) ;
printf ("The string name = %sn",name) ;
return 0 ;
}
لاحظ أن المخرجات ستكون بالشكل التالي :
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:%sn", 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 ( ) ;
2. getche ( ) ;
3. getch ( ) ;
وهذه دوال إدخال حرف واحد و هي متشابهه في الشكل و لكن مختلفة في الأداء نوعاً ما .
الدلة الأولى : getchar توجد ضمن ملف التوجية stdio.h و تستخدم لإدخال حرف واحد ويظهر على الشاشة بعد الكتابة ولا ينتقل إلى الأمر الذي بعده إلا إذا ضغط المستخدم على مفتاح Enter .
مثال:
char ch ;
ch = getchar() ;
printf ("%c",ch) ;
الدلة الثانية : getche وتوجد ضمن ملف التوجية conio.h و تستخدم ايضاً لإدخال حرف واحد و يظر على الشاشة إلا أنها تختلف عن الدالة getchar في أنها لا تحتاج الضغط على مفتاح Enter للإنتقال للأمر التالي...
مثال:
char ch ;
ch = getche() ;
printf ("%c",ch) ;
الدالة الثالثة : getch ( محبوبتي ) وتوجد ضمن ملف التوجية conio.h ومع هذه الدالة الأمر مختلف عن الدالتين السابقتين, فالدالتين
السابقتين كان الحرف يظهر على الشاشة و لكن هنا لا يظهر و لا يطلب من المستخدم الضغط على مفتاح Enter للإكمال .
مثال :
char ch ;
ch = getch();
printf("%c",ch);
طبعاً أولاً نفذ هذه الدوال الثلاث و ضعها في برنامج .
ثم لنرى فائدة من فوائد الدالة الأخيرة getch إذا كنت من مستخدمي منتجات بورلاند فلابد من أنك قد مملت ان ينفذ البرنامج
و عند الإنتهاء منه تضغظ على مفتاحي Alt + F5 لترى آخر النتائج , الدالة getch تحل لك هذه المشكلة كل ما عليك هو ان
تكتب في نهاية الدالة main الجملة التالية
getch();
و جرب و سترى ان هذا يحل لك الاشكال ...
و هذا أيضاً إذا كنت تريد ان تري المستخدم شئ و ستمسح الشاشة بعدها
ماهو الحل بالتأكيد الدالة getch و بعدها قم بمسح الشاشة .
- مسوي دعاية لهالدالة كأنها متنج تلفزيوني أبغا أبيعه – .
وتستخدم هذه الدالة أيضاً في حركات كتابة أرقام السر لأنه ليس من
المفروض ان يرى المستخدم رقمة السري ولا لا ؟!؟
رابعاً:
دالة الإدخال gets :
توجد هذه الدالة ضمن ملف التوجية stdio.h , و تستخدم في إدخال عبارة حرفية -string- وتستخدم كالتالي:
gets ( str ) ; // str is type of array of char ….
لنرى المثال التالي :
#include "stdio.h"
#include "conio.h"
main ()
{
char name[20] ;
printf ("nPlease Enter Your name: ") ;
gets (name) ;
puts (name) ;
printf ("n%s",name);
getch ();
return 0 ;
}
طبعاً يوجد في البرنامج دالة جديدة علينا وهي الدالة 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 ولها نفس المعاملات تماماً و تستخدم بنفس الطريقة .
عموما أسألوا لي التوفيق من الله تعالى .
وأسال الله لكم التوفيق و النفع بما لدي و أن أنتفع بما لديكم .
بسم الله الرحمن الرحيم
دوال الإدخال و الإخراج في لغة سي
في هذا الدرس سنتعرف على دوال جديدة مختلفة كثيراً عن الدرس السابق ... سنتعرف الآن على دوال مختصة في الإدخال و الإخراج 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"
main ( )
{
int a = 5, b = 10, c ;
float f = 45.5 ;
char ch = 'Y' ;
char name[10] = "Talal" ;
c = a + b ;
printf ("The int c = %d n",c) ;
printf ("The float f = %f n",f) ;
printf ("The char ch = %c n",ch) ;
printf ("The string name = %sn",name) ;
return 0 ;
}
لاحظ أن المخرجات ستكون بالشكل التالي :
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:%sn", 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 ( ) ;
2. getche ( ) ;
3. getch ( ) ;
وهذه دوال إدخال حرف واحد و هي متشابهه في الشكل و لكن مختلفة في الأداء نوعاً ما .
الدلة الأولى : getchar توجد ضمن ملف التوجية stdio.h و تستخدم لإدخال حرف واحد ويظهر على الشاشة بعد الكتابة ولا ينتقل إلى الأمر الذي بعده إلا إذا ضغط المستخدم على مفتاح Enter .
مثال:
char ch ;
ch = getchar() ;
printf ("%c",ch) ;
الدلة الثانية : getche وتوجد ضمن ملف التوجية conio.h و تستخدم ايضاً لإدخال حرف واحد و يظر على الشاشة إلا أنها تختلف عن الدالة getchar في أنها لا تحتاج الضغط على مفتاح Enter للإنتقال للأمر التالي...
مثال:
char ch ;
ch = getche() ;
printf ("%c",ch) ;
الدالة الثالثة : getch ( محبوبتي ) وتوجد ضمن ملف التوجية conio.h ومع هذه الدالة الأمر مختلف عن الدالتين السابقتين, فالدالتين
السابقتين كان الحرف يظهر على الشاشة و لكن هنا لا يظهر و لا يطلب من المستخدم الضغط على مفتاح Enter للإكمال .
مثال :
char ch ;
ch = getch();
printf("%c",ch);
طبعاً أولاً نفذ هذه الدوال الثلاث و ضعها في برنامج .
ثم لنرى فائدة من فوائد الدالة الأخيرة getch إذا كنت من مستخدمي منتجات بورلاند فلابد من أنك قد مملت ان ينفذ البرنامج
و عند الإنتهاء منه تضغظ على مفتاحي Alt + F5 لترى آخر النتائج , الدالة getch تحل لك هذه المشكلة كل ما عليك هو ان
تكتب في نهاية الدالة main الجملة التالية
getch();
و جرب و سترى ان هذا يحل لك الاشكال ...
و هذا أيضاً إذا كنت تريد ان تري المستخدم شئ و ستمسح الشاشة بعدها
ماهو الحل بالتأكيد الدالة getch و بعدها قم بمسح الشاشة .
- مسوي دعاية لهالدالة كأنها متنج تلفزيوني أبغا أبيعه – .
وتستخدم هذه الدالة أيضاً في حركات كتابة أرقام السر لأنه ليس من
المفروض ان يرى المستخدم رقمة السري ولا لا ؟!؟
رابعاً:
دالة الإدخال gets :
توجد هذه الدالة ضمن ملف التوجية stdio.h , و تستخدم في إدخال عبارة حرفية -string- وتستخدم كالتالي:
gets ( str ) ; // str is type of array of char ….
لنرى المثال التالي :
#include "stdio.h"
#include "conio.h"
main ()
{
char name[20] ;
printf ("nPlease Enter Your name: ") ;
gets (name) ;
puts (name) ;
printf ("n%s",name);
getch ();
return 0 ;
}
طبعاً يوجد في البرنامج دالة جديدة علينا وهي الدالة 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 ولها نفس المعاملات تماماً و تستخدم بنفس الطريقة .
عموما أسألوا لي التوفيق من الله تعالى .
وأسال الله لكم التوفيق و النفع بما لدي و أن أنتفع بما لديكم .