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

السؤال

نشر

أحاول القيام ببرنامج بسيط، وفي جزء من هذا البرنامج أريد أن أقوم بزيادة قيمة المتغير x والمتغير y ثم طباعتهما:

 

int x{ 1 };
int y{ 2 };
std::cout << (++x, ++y);	// 3

لكن المشكلة أني أجد أن القيمة 3 تمت طباعتها فقط بدون طباعة القيمة 2، عندما أقوم بهذا الأمر في Python أو JavaScript يتم طباعة كلا المتغيرين، ما سبب هذه المشكلة هنا؟

Recommended Posts

  • 1
نشر

أنت تستعمل المعامل , comma operator هنا وهذا معامل موجود في لغة ++C، وهو المعامل الأقل أهمية في ترتيب التنفيذ (أي له أقل أولوية في عملية التنفيذ)، ويقوم هذا المعامل بتنفيذ الجزء الموجود على اليسار ثم يعيد الجزء الموجود على اليمين، فعلى سبيل المثال في الكود التالي سيتم زيادة قيمة x و سيتم تهيئة المتغير y بالقيمة 3

int x{ 1 };
int y{ (++x, 3) }; // تم إحاطة العملية بأقواس لكي لا يظهر خطأ too many initializer values
std::cout << y;	// 3

يتجنب المبرمجين إستخدام إستخدام هذا المعامل قدر الإمكان، ما عدا في حلقات for حيث يتم إستخدامه لعمل أكثر من عداد في نفس الحلقة، كما في الكود التالي:

#include <iostream>

int main()
{
    for (int x{ 0 }, y{ 9 }; x < 10; ++x, --y)
        std::cout << x << ' ' << y << '\n';

    return 0;
}

وستكون ابنتيجة كالتالي:

0 9
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
9 0

أما بالنسبة لطباعة المتغير فيمكنك ببساطة إستخدام المعامل >> مرتين أو أكثر، على النحو التالي:

int x{ 1 };
int y{ 2 };
std::cout << ++x << ' ' << ++y << '\n';
  • 0
نشر

يمكن استخدام دالة prinf لطباعة مجموعة متغيرات مع تحديد نمطهم

int x = 5;
int y = 10;
printf("%d : %d\n", x, y);

سيعطي الخرج التالي:

5 : 10

لاحظ استخدام d% عند طباعة رقم digit 

  • نستخدم c عند طباعة محارف Characters
  • نستخدم f عند طباعة أرقام فاصلة عائمة Floats
  • نستخدم d عند طباعة أرقام عشرية Decimals
  • نستخدم s عند طباعة سلاسل نصية Strings
specifier	Output	Example
d/i	Signed decimal integer	392
u	Unsigned decimal integer	7235
o	Unsigned octal	610
x	Unsigned hexadecimal integer	7fa
X	Unsigned hexadecimal integer (uppercase)	7FA
f	Decimal floating point, lowercase	392.65
F	Decimal floating point, uppercase	392.65
e	Scientific notation (mantissa/exponent), lowercase	3.9265e+2
E	Scientific notation (mantissa/exponent), uppercase	3.9265E+2
g	Use the shortest representation: %e or %f	392.65
G	Use the shortest representation: %E or %F	392.65
a	Hexadecimal floating point, lowercase	-0xc.90fep-2
A	Hexadecimal floating point, uppercase	-0XC.90FEP-2
c	Character	a
s	String of characters	sample
p	Pointer address	b8000000
n	Nothing printed.
	The corresponding argument must be a pointer to a signed int.
	The number of characters written so far is stored in the pointed location.	
%	A % followed by another % character will write a single % to the stream.	%

 

مثال:

printf("Hello %s \n", "wael");             // Hello wael

printf("Digit: %d \n", 9);                 // Digit: 9

printf("Float %f \n", 2.23);               // Float 2.230000

printf("Float two decimal %.2f", 2.23);    // Float two decimal 2.23

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...