Devil Code

هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

DevilCode


    دوال الإدخال و الإخراج في لغة سي

    Coder
    Coder
    Manager
    Manager


    عدد المساهمات : 202
    النقاط : 5976
    تاريخ التسجيل : 20/10/2009
    العمر : 37

    دوال الإدخال و الإخراج في لغة سي  Empty دوال الإدخال و الإخراج في لغة سي

    مُساهمة  Coder الأحد ديسمبر 26, 2010 8:43 pm

    دوال الإدخال و الإخراج في لغة سي


    بسم الله الرحمن الرحيم

    دوال الإدخال و الإخراج في لغة سي


    في هذا الدرس سنتعرف على دوال جديدة مختلفة كثيراً عن الدرس السابق ... سنتعرف الآن على دوال مختصة في الإدخال و الإخراج 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 ( محبوبتي Very Happy ) وتوجد ضمن ملف التوجية conio.h ومع هذه الدالة الأمر مختلف عن الدالتين السابقتين, فالدالتين
    السابقتين كان الحرف يظهر على الشاشة و لكن هنا لا يظهر و لا يطلب من المستخدم الضغط على مفتاح Enter للإكمال .
    مثال :


    char ch ;
    ch = getch();
    printf("%c",ch);



    طبعاً أولاً نفذ هذه الدوال الثلاث و ضعها في برنامج .


    ثم لنرى فائدة من فوائد الدالة الأخيرة getch إذا كنت من مستخدمي منتجات بورلاند فلابد من أنك قد مملت ان ينفذ البرنامج

    و عند الإنتهاء منه تضغظ على مفتاحي Alt + F5 لترى آخر النتائج , الدالة getch تحل لك هذه المشكلة كل ما عليك هو ان

    تكتب في نهاية الدالة main الجملة التالية


    getch();


    و جرب و سترى ان هذا يحل لك الاشكال ... Wink



    و هذا أيضاً إذا كنت تريد ان تري المستخدم شئ و ستمسح الشاشة بعدها
    ماهو الحل بالتأكيد الدالة getch و بعدها قم بمسح الشاشة .
    - مسوي دعاية لهالدالة كأنها متنج تلفزيوني أبغا أبيعه – Very Happy .


    وتستخدم هذه الدالة أيضاً في حركات كتابة أرقام السر لأنه ليس من
    المفروض ان يرى المستخدم رقمة السري ولا لا ؟!؟ Wink

    رابعاً:
    دالة الإدخال 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 ولها نفس المعاملات تماماً و تستخدم بنفس الطريقة .



    عموما أسألوا لي التوفيق من الله تعالى .
    وأسال الله لكم التوفيق و النفع بما لدي و أن أنتفع بما لديكم .

      الوقت/التاريخ الآن هو السبت نوفمبر 23, 2024 12:16 am