سؤال

لدي سؤال بسيط أقيم فيه في الغالب على فضولي.

ما هي الاختلافات بين هذين سطرين من التعليمات البرمجية؟ (في C ++)

for(int i = 0; i < N, N > 0; i++)

for(int i = 0; i < N && N > 0; i++)

اختيار الشروط تعسفي تماما، أنا مهتم فقط بالاختلافات بين، و &&.

أنا لست مبتدئا للترميز بأي وسيلة، لكنني لم أزعجك أبدا مشغل الفاصلة.

هل هناك اختلافات أداء / سلوك أم أنها جمالية بحتة؟

ملاحظة أخيرة، وأنا أعلم أن هناك أسماك الأداء الأكبر لقلق من المشغل الشرطي، لكنني مجرد فضول. تنغمس لي.

يحررشكرا لإجاباتك.

اتضح الكود الذي دفع هذا السؤال استخدم مشغل الفاصلة في الطريقة التي وصفتها. تساءلت عما كان الفرق ولماذا لم يكن المشغل A &&، ولكن تم كتابته بشكل غير صحيح. لم أفكر في أي شيء كان خطأ في ذلك لأنه يعمل على ما يرام. شكرا لاستقامة لي.

هل كانت مفيدة؟

المحلول

على الرغم من أنها تبدو وكأنها،

for(int i = 0; i < N, N > 0; i++)

و

for(int i = 0; i < N && N > 0; i++) 

ليست معادلة.

هنا هو الدليل.

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  int val = (N, i);
  cout << val << endl;
}

نتيجة:

5

مما يعني أن تحديد الوقت عند تحديد الحلقة سيستخدمها N > 0وبعد إذا N = 10, وهذا يعني أنه سيكون دائما صحيحا ولن يخرج الحلقة أبدا.

تشغيل هذا ورؤية الدليل.

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  for(int i = 0; i < N, N > 0; i++){
     cout << val << endl;
  }
}

bash-2.05$ ./a.out                  
0                                   
1                                   
2                                   
3                                   
4                                   
5                                   
6                                   
7                                   
8                                   
9                                   
10                                  
11                                  
...
142
143
144
145
146
147
148
^C

إذا كان n ثابت أو متغير لا يتغير داخل الحلقة، فيمكنك فقط إزالة N > 0 تحقق من خلال التحقق من ذلك مرة واحدة أولا، أي

if (N > 0){
  for (int i = 0; i < N; i++)
   ...
}

نصائح أخرى

باستخدام فاصلة مثل هذا سوف ببساطة تجاهل الشرط الأول.

تعني مشغل الفاصلة "تشغيل هذه العبارات بهذا الطلب، واتخاذ قيمة آخر واحد".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top