اذهب إلى المحتوى
  • 0

الفرق بين cout و printf في c++ 

Ziena Darffat

السؤال

Recommended Posts

  • 2

ليس هناك فرق بين نوع عمل الدالتين فهما الاثنتين يقومان بالطباعة على موجه الأوامر CMD. وايضاً هناك اختلاف في الإستخدام فعلى سبيل المثال طريقة إدراج متغير تختلف في الدالتين ففي دالة cout تكون كالآتي

#include <iostream>
using namespace std;

int main ()
{
  // تعريف متغير
  int i = 4;
  // إدراج المتغير لطباعته
  cout << "The number is " << i;
  return 0;
}

اما في دالة printf

#include <stdio.h>

int main() {
  	// تعريف المتغير
    int num = 4;
    // إدراج المتغير لطباعته
    printf("Hello world %d", num);
    
    return 0;
}

والإختلاف المهم هو أن دالة cout يتم إستخدامها في ++C ويتم إستيرادها من مكتبة iostream

اما دالة printf فيتم إستخدامها في C ويتم إستيرادها من مكتبة stdio.h

ويُفضل إستخدام iostream بدلاً من cstdio لأن iostream

  • أكثر أمانًا من ناحية النوع : مع <iostream> نوع الكائن الذي يتم إدخاله / إخراجه معروف بشكل ثابت بواسطة المترجم. في المقابل ، <cstdio>يستخدم الحقول "٪" لاكتشاف الأنواع ديناميكيًا.
  • أقل عرضة للخطأ: مع <iostream>، لا توجد رموز "٪" زائدة يجب أن تكون متسقة مع الكائنات الفعلية التي يتم إدخالها / إخراجها
  • قابل للتوسيع:تسمح آلية <iostream>  بأنواع جديدة معرّفة من قبل المستخدم لتكون قابلة للإدخال / إخراج دون كسر الكود الحالي. تخيل الفوضى إذا قام الجميع في نفس الوقت بإضافة حقول "٪" جديدة غير متوافقة إلى printf() و scanf()؟!
  • قابل للوراثة:آلية  <iostream>   مبنية من فئات حقيقية مثل std::ostream و std::istream. على عكس <cstdio> . 
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

لاتوجد فروقات مهمة ، لكن هناك فرق في طريقة الاستخدام ، انظر للمثال :

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int x=1;
    cout<<"The x value is:"<<" "<<x<<endl;
    printf("The x value is: %d",x);
    return 0;
}
// الخرج سوف يكون
The x value is: 1
The x value is: 1

نلاحظ لا يوجد أي فرق بين الطريقتين من حيث قيمة الخرج,لكن الفرق هو بطريقة طباعة كل من cout و printf
لكن ماذا تعني %d في printf؟
يجيب ان تخبر ال printf بنمط المتحول الذي بداخله وهذه الرموز تعبر عن نمط المتحولات
%d=int
%c=char
%s=string
%f=float
ومن الضروري وضعه، بدونه لن يطبع قيمة المتحول.
مثلا اذا كان الكود كالتالي:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    float x=1.1;
    printf("The x value is:",x);
    return 0;
}

سيكون الخرج The x value is
نلاحظ عدم طباعة اي قيمة
والتصحيح هو:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    float x=1.1;
    printf("The x value is: %f",x);
    return 0;
}

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

كلاهما يُستخدم لطباعة المخرجات من البرنامج، ولكن التابع printf أسرع بكثير، وهذا تلحظه فقط في مجال البرمجة التنافسية competitive programming حيث يوجد حدود زمنية صغيرة لكل مسألة و في حال استخدمت cin//cout ربما لن يحقق برنامجك الحدود الزمنية، لذلك يميل الحكام في المسابقات لضبط الزمن الخاص بحل مسألة برمجية باستخدم scanf//printf لأنها أسرع و يفترض من المتسابقين استخدامها

فرق السرعة فعليا أن كلا من cin - cout تحتاج لمعرفة نوع المتغير قبل قراءته و قبل طباعته مايأخذ بعض الوقت، في حين أن scanf//printf يتم تمرير نمط المتغير لهما.

والفرق بطريقة الكتابة هي أن  cin - cout تستخدم المعاملات << >> بين المتغيرات، أما scanf//printf تأخذ سلسلة نصية كمعامل أول تحدده في format أو شكل عام للمخرجات و تعمل به، و المتغيرات يتم تمريرهم كلً على حدى ونفصل بينهم بفاصلة مثل ألأمثلة في باقٍ الإجابات على سؤالك.

بشكل عام يمكنك الإعتماد على cin - cout في برامجك لامشكلة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...