c++11 - strange loop logic in c++ -


  std :: cout & lt; & lt; "आप कितने मुड़ें करना चाहते हैं?" & Lt; & lt; Std :: endl & lt; & lt; Std :: endl & lt; & lt; std :: endl; Std :: स्ट्रिंग बदलता है; परिभाषित; Std :: cin & gt; & gt; turnsDefined; //std::cin.sync (); Bool है है पिन = झूठे; Int objectSizeIniti = 0; Int objectSizePost = 0; के लिए (चार सी: बदलता है परिभाषित) {objectSizeIniti ++; } Bool boolForCharIsDigi [objectSizeIniti]; (Bool _b: boolForCharIsDigi) के लिए {_b = false; } जबकि (हैपसड! = सच) {for (चार सी: बदलता हुआ परिभाषित) {यदि (isdigit (c) == 0) {boolForCharIsDigi [objectSizePost] = false; } और अगर (isdigit (c)! = 0) {boolForCharIsDigi [objectSizePost] = सच; } Bool allTrue = false; के लिए (इंट आई = 0; आई & lt; sizeof (boolForCharIsDigi) / sizeof (boolForCharIsDigi [0]); आई + +) {if (boolForCharIsDigi [i] == गलत) {allTrue = false; Std :: cin & gt; & gt; turnsDefined; Std :: cout & lt; & lt; "आप केवल मुड़ने की मात्रा को परिभाषित करने के लिए संख्याओं का उपयोग कर सकते हैं। कोई भी दशमलव नहीं।" & Lt; & lt; Std :: endl & lt; & lt; std :: endl; टूटना; } और अगर (boolForCharIsDigi [i] == सच) {allTrue = true; HasPassed = true}}} objectSizePost ++; }  

मैं यह समझने की कोशिश कर रहा हूं कि उपरोक्त कोड इतनी अजीब क्यों काम करता है।

मैं क्या करने की कोशिश कर रहा हूं:

इनपुट और परीक्षण प्राप्त कर रहा हूँ अगर इसमें केवल अंक होते हैं। यदि ऐसा होता है, तो यह केवल पाश को गुजरता है (वैरिएबल निर्धारित करता है w-लूप सच की जांच कर रहा है)। यदि इनपुट में अंकों के अलावा अन्य वर्ण होते हैं, तो वह दूसरे इनपुट का अनुरोध करता है और उपयोगकर्ता को चेतावनी देता है।

क्या होता है: यह वास्तव में "केवल संख्याएं" कुल मिलाकर पूरे कार्यक्रम बेतरतीब ढंग से कार्य करता है।

मैं क्या करने की कोशिश कर रहा हूं: इनपुट और परीक्षण प्राप्त कर रहा हूँ अगर इसमें केवल अंक होते हैं। यदि ऐसा होता है, तो यह केवल पाश को गुजरता है (वैरिएबल निर्धारित करता है w-लूप सच की जांच कर रहा है)। यदि इनपुट में अंकों के अलावा अन्य वर्ण शामिल हैं, तो वह दूसरे इनपुट का अनुरोध करता है और उपयोगकर्ता को चेतावनी देता है।

डिबगिंग भाग को छोड़ना, मेरा सुझाव है कि आपके पास होना चाहिए:

  यदि (std :: all_of (turnsDefined.begin), turnsDefined.end (), :: isdigit)) {// सही इनपुट} else {/ उपयोगकर्ता को चेतावनी दें, सामान फिर से दर्ज करें}   

Comments