هل من الممكن أن يكون حلقة في حين ج ++ الذي يجعل الاختيار في منتصف حلقة بدلا من بداية أو نهاية؟

StackOverflow https://stackoverflow.com/questions/1807110

سؤال

وأريد أن يكون حلقة في حين تفعل شيئا مثل ما يلي، ولكن هل هذا ممكن في ج ++؟ إذا كان الأمر كذلك، كيف يمكن بناء الجملة تذهب؟


do {
    //some code
    while( expression to be evaluated );
    // some more code
}

واريد الحلقة إلى أن خرج في أقرب وقت يقرر البيان في حين أن التعبير لم يعد صحيحا (أي إذا التعبير غير صحيح، // لا يتم تنفيذ بعض التعليمات البرمجية أكثر)

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

المحلول

ويمكنك القيام به:

while (1) {
   //some code
   if ( condition) {
       break;
   }
   // some more code
}

نصائح أخرى

وخلفية والتحليل قليلا: ما كنت تطالب سمعت يسمى " دال حلقة "، الذى سمى باسم أولي يوهان دال من سيمولا الشهرة. كما تنص شون E.، C ++ لا يكون لهم (الجواب معهد العالم العربي جانبا)، على الرغم من بعض اللغات الأخرى تفعل (لا سيما ادا). ويمكن أن تحل محل "إفعل بينما" و "دو بينما" حلقات، مما يجعله بناء مفيد. حالة أكثر عمومية تسمح لعدد التعسفي من الاختبارات. في حين لم يكن لديك C ++ بناء جملة خاص لحلقات دال، شون McCauliff والأجوبة اراك وتعادل لهم تماما. وينبغي أن تتحول إلى "بينما (حقيقية)" حلقة في قفزة بسيطة من قبل المجمع، وبالتالي فإن النسخة المترجمة لا يمكن تمييزه تماما من إصدار المترجمة حلقة دال افتراضية. إذا وجدت أنه أكثر قابلية للقراءة، هل يمكن أيضا استخدام

do {
    ...
} while (true);

حسنا، أعتقد أنك يجب أن تتحرك الشرط إلى منتصف الحلقة (؟):

while (true)
{
  ...
  // Insert at favorite position
  if (condition)
    break;
  ...
}

ومن الناحية الفنية، نعم:

 for ( ;CodeBefore, Condition; ) {CodeAfter}

والجواب هو لا، لا يمكن أن يكون حلقة الخاص بك تنتهي تلقائيا عندما يكون الشرط أن البيان بينما من المفترض أن تقييم صحيح حتى في الواقع يقيم في أعلى (أو أسفل) من الحلقة. لا يمكن وضع البيان في حين أنه في منتصف الحلقة.

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