2009-10-02 13 views
7

मेरे पास एक मूल सी प्रोग्राम है जो एक संख्या उत्पन्न करता है और उपयोगकर्ता को इसका अनुमान लगाना पड़ता है (हाँ, आप इसे पहले ही कह चुके हैं: होमवर्क)। मैं इसे बहुत अधिक प्राप्त करने में सक्षम हूं इसलिए मुझे बहुत गर्व है, लेकिन मैंने निश्चित रूप से किए गए किसी भी त्रुटि को खोल दिया है, मैं अभी भी सीख रहा हूं। मेरे मुख्य दो प्रश्नसी में जल्दी लूप कैसे समाप्त करें?

  1. प्रयासों के # 10 तक पहुंचने से पहले, उपयोगकर्ता ने सही संख्या का चयन करने के तुरंत बाद इस कार्यक्रम को कैसे समाप्त कर सकता हूं? और
  2. कोई स्पष्ट त्रुटि एक गुरु देख सकता है कि मैं अपने कोड के साथ नहीं हूं?

मैं के रूप में सबसे अच्छा के रूप में कार्यक्रम के कोशिश कर रहा हूँ मैं कर सकते हैं :)

int main(void) 
{ 
    int x = 10; 
    int i = 0; 
    int target, guess; 
    int numGuess = 0; 

    /*create a random number*/ 
    //create random function 
    srand(time(NULL));//this creates new number based on time which changes every second :) 
    target = rand() % 99; //create a random number using the rand() function, from 0 -99 



    do{ 
     //increase the loop until it meets the x variable 
     i++; 
     numGuess++; 
     //allow user to input a number for guess 
     scanf("%d", &guess); 
     if (guess == target) 
     { 
      printf("You win! \n\n"); 

     } 
     else if (guess > target) 
     { 
      printf("You are too high. Guess a number:\n\n"); 
     } 
     else if (guess < target) 
     { 
      printf("You are too low. Guess a number:\n\n"); 
     } 

    }while(i < x); 
     printf("You lose, the number was %d. \n", target); 

    printf("Number of tries %d\n", numGuess); 
    printf("Enter any key to exit..."); 
    getchar(); 
    getchar(); 

    return 0; 
} 
+2

आपको बुनियादी कार्यक्रम संरचना, डू/जबकि लूप, आईओ, एसएसकेएनएफ, रैंड, आरएनजी बीजिंग, लेकिन 'ब्रेक' नहीं सिखाया गया था? – Jason

+4

यह देखने के लिए अच्छा है कि आपने अपना कोड टिप्पणी की है - अच्छी तरह से किया गया: डी –

+0

अंत में दो getchar() कॉल क्यों हैं, जब आप कहते हैं कि प्रोग्राम को समाप्त करने के लिए केवल 1 कुंजी चाहिए? –

उत्तर

15

एक लूप से बाहर कूद करने के लिए break बयान का उपयोग करें: इस मामले में हालांकि यह है कि आप एक बार के बाद से क्या चाहते हैं नहीं हो सकता है आप लूप से बाहर तोड़ने के बाद आप तुरंत "खो देंगे" संदेश देखेंगे। इसके लिए आपको अपने कार्यक्रम को पुन: व्यवस्थित करने की आवश्यकता हो सकती है। इस तरह

कोशिश कुछ:

int main(void) 
{ 
    int x = 10; 
    int i = 0; 
    int target, guess; 
    int numGuess = 0; 

    /*create a random number*/ 
    //create random function 
    srand(time(NULL));//this creates new number based on time which changes every second :) 
    target = rand() % 99; //create a random number using the rand() function, from 0 -99 

    do { 
     //increase the loop until it meets the x variable 
     i++; 
     numGuess++; 
     //allow user to input a number for guess 
     scanf("%d", &guess); 
     if (guess == target) 
     { 
      printf("You win! \n\n"); 
      break; 
     } 
     else if (guess > target) 
     { 
      printf("You are too high. Guess a number:\n\n"); 
     } 
     else if (guess < target) 
     { 
      printf("You are too low. Guess a number:\n\n"); 
     } 

    }while(i < x); 

    if (guess != target) { 
     printf("You lose, the number was %d. \n", target); 
    } 

    printf("Number of tries %d\n", numGuess); 
    printf("Enter any key to exit..."); 
    getchar(); 
    getchar(); 

    return 0; 
} 
+8

आपको होमवर्क सवालों के जवाब में पूर्ण संशोधित कार्यक्रम पोस्ट नहीं करना चाहिए। यहां तक ​​कि अगर पोस्टर दिए गए उत्तर को लागू किए बिना सामग्री सीखता है, तो पोस्टर को अभी भी किसी को पूर्ण उत्तर दिखाने के लिए परेशानी हो सकती है। – Novelocrat

+1

@ नोवेलोक्रेट - प्वाइंट लिया गया :) –

9

आप break आदेश के लिए देख रहे हैं।

for (int i = 0; i < 10; i++) { 
    if(i == 5) 
     break; 
} 

This resource लगता है कि यह आप के लिए बहुत मददगार होगा।

एक साइड नोट के रूप में: आपका "आप हार जाते हैं" टेक्स्ट हमेशा प्रदर्शित नहीं होगा। आप उस {} लूप के अंदर मूल्यांकन करना चाह सकते हैं।


इस उत्तर पर पोस्ट/संपादन के साथ हमेशा एक कदम आगे एंड्रयू हरे!

+0

स्थिति में लूप का उपयोग नहीं किया जाना चाहिए सही प्रतिक्रिया है। जबकि इसे संभालने का सही तरीका कुछ है। –

0

अपने कार्यक्रम के मामले इस लक्ष्य को हासिल करने के लिए सबसे अच्छा तरीका में शायद कॉल करने के लिए है

शून्य से बाहर निकलें (पूर्णांक स्थिति);

मुद्रण "तुम जीत"

सामान्य आप किसी भी समय एक पाश बाहर निकलने के लिए कीवर्ड "तोड़" का उपयोग कर सकते बाद

(stdlib.h शामिल हैं)। इसका आपके मामले में वांछित प्रभाव नहीं है क्योंकि यह "आप हार जाते हैं" प्रिंट करने के लिए आगे बढ़ेगा। यदि आप "ब्रेक" का उपयोग करना चाहते हैं तो आपको "खोना ..." बिट के आस-पास "if" कथन रखना होगा और जांचें कि उपयोगकर्ता वास्तव में जीता नहीं है या नहीं।

+4

प्रोग्राम से बाहर निकलने के लिए 'निकास() 'का उपयोग करके मैं बहुत नापसंद हूं; मैं व्यक्तिगत रूप से घातक त्रुटियों के लिए इसका उपयोग आरक्षित करता हूं। इस उदाहरण में इसके बजाए 'ब्रेक' का उपयोग करना मुश्किल है, या थोड़ी देर की स्थिति को बदलना भी सुझाव दिया गया है। – Twisol

9

उपयोगकर्ता के अनुमान के लिए समय शर्त क्यों सेट नहीं करें? कुछ ऐसा:

...}while(i < x || guess !== target); 
+2

कोड का इरादा अधिक स्पष्ट होने के बाद ब्रेक का उपयोग करना बेहतर होगा। –

+3

आपको ऐसा लगता है? मुझे लगता है कि यह समय पर समाप्त हो रहा है और अधिक स्पष्ट है। यह कहने जैसा है "मैं तब तक पूछता रहूंगा जब तक आप इसे सही न हो या संभावनाओं से बाहर न हो जाएं"। ब्रेक होने से ऐसा लगता है कि एक त्रुटि हुई है या कुछ और महत्वपूर्ण ध्यान देने की जरूरत है ... – Anthony

+2

मैं असहमत हूं। इस मामले में इसे समाप्त होने पर लूप में प्रवेश किया जा सकता है। ब्रेक का उपयोग करके, उसे जानने के लिए कोड को जाने के लिए पढ़ना होगा। –

8

यहां तीन संभावनाएं हैं। उनके बारे में पढ़ें !!! (गोटो हानिकारक माना)

if (guess == target) 
{ 
    printf("You win! \n\n"); 
    break; 
} 

if (guess == target) 
{ 
    printf("You win! \n\n"); 
    goto end; 
} 


if (guess == target) 
{ 
    printf("You win! \n\n"); 
    i=n; 
} 
+1

और कुछ संदर्भों में 'कुछ_value वापस लौटें;' भी। – dmckee

1

मैं किसी भी "स्पष्ट त्रुटियों" है कि पिछले पोस्टर का उल्लेख नहीं था नहीं दिख रहा है, तथ्य यह है कि, ब्रेक के साथ, आप अब दोनों "मैं" और "numGuess" की जरूरत के अलावा अन्य क्योंकि वे हमेशा एक ही मूल्य होगा। बस की स्थिति में "i" के बजाय numGuess का उपयोग करें।

लेकिन मैं आपको अपने कोड को और अधिक पठनीय बनाने के लिए अत्यधिक अनुशंसा करना चाहता हूं - अच्छी कोडिंग शैली की आदत में आने का सबसे अच्छा समय अब ​​बुरी आदतों को हासिल करने और ठोस बनाने से पहले है।

  • हमेशा स्वयं-वर्णन करने वाले पहचानकर्ताओं (चर/फ़ंक्शन नाम) का उपयोग करें। जैसे आपका "एक्स" वास्तव में "maxGuesses" कहा जाना चाहिए।

  • सफेद जगह पर कंजूसी न करें। जैसे "} जबकि (i < एक्स);" होना चाहिए "} जबकि (i < x);"

  • ऐसा लगता है कि आप टिप्पणियों पर स्किमिंग करने की आदत में पहले से ही नहीं मिल पाए हैं - अच्छा !!!

    बस याद रखें कि टिप्पणियां हमेशा इस उद्देश्य के बारे में बताती हैं कि मैकेनिक्स के बजाय कोड क्या करता है, यह तब तक करता है जब तक मैकेनिक्स इतना मुश्किल और चालाक न हो कि उसे स्पष्टीकरण की भी आवश्यकता हो।/प्रयासों आम तौर पर मौजूदा कोड, अपने स्वयं के या किसी और के बनाए रखने पर खर्च कर रहे हैं विकास समय की

    • 80-90%:

    कारण यह है कि यह महत्वपूर्ण है दो गुना है। यह कार्य अच्छी तरह से प्रलेखित और आसानी से पठनीय कोड के साथ सबसे आसान है। (आपको पता नहीं है कि किसी व्यक्ति को उत्पादन समस्या के दौरान 2am पर अपरिचित कोड पढ़ने से कितना मस्तिष्क नुकसान हो सकता है क्योंकि बोझो ने इसे लिखा था, लगातार कोड को इंडेंट नहीं किया था)।

  • अच्छी तरह से प्रलेखित और पठनीय कोड होने से आपके लिए इसे लिखना आसान हो जाता है, क्योंकि यह आपके अपने विचारों को स्पष्ट करता है और बेवकूफ टाइपो-उत्पत्ति वाली बग को हतोत्साहित करता है ("oups, मैं y के बजाय x का उपयोग करना चाहता था")।

संबंधित मुद्दे