2010-08-11 5 views
5

संभव डुप्लिकेट इस सी कार्यक्रम के साथ गलत क्या है:
Help with C puzzleक्या

कार्यक्रम के इरादे ऋण चिह्न मुद्रित करने के लिए 20 बार था, लेकिन यह काम नहीं करता।

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; i--) 
      printf("-"); 
     return 0; 
    } 
+1

उत्पादन/त्रुटि क्या है? – James

+1

यह अनंत शून्य चिह्न देता है ... – SurajRk

+4

क्या यह एक होमवर्क समस्या है? –

उत्तर

24
#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; i++) 
      printf("-"); 
     return 0; 
    } 

आप i-- बदलें मैं साथ ++ -- बजाय ++

+5

यूप, वह लूप हमेशा के लिए चलेगा क्योंकि 'मैं' 0' से शुरू होता हूं और छोटा हो जाता रहता है। यह * एन * से बड़ा कभी नहीं होगा, इसलिए लूप की निकास की स्थिति कभी नहीं पहुंच जाएगी। – FrustratedWithFormsDesigner

+4

निश्चित रूप से यह एन से बड़ा होगा जब पूर्णांक चारों ओर लपेटता है? लूप सिर्फ इरादे से थोड़ी देर तक दौड़ जाएगा। – signine

4
int main() { 
    int i; 
    int n = 20; 
    for(i = 0; i < n; i++) 
    printf("-"); 
    return 0; 
} 

आपके पास वेतन वृद्धि के बजाय कमी थी। "-" जब तक "मैं" है के लिए कम से कम 20 के बाद हर

2

आप

i-- 

i++ 

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

1

i-- i ++

होने की जरूरत है आप भी

int n = -20; 
    for(i = 0; i > n; i--) 

कर सकता है लेकिन यह है कि कोडिंग अभ्यास

+4

खराब कोडिंग अभ्यास का उत्तर क्यों दिया गया है? –

+2

क्योंकि अन्य स्थितियों में आप अपने काउंटर को कम करना चाहते हैं। इस मामले में काउंटर को कम करने से कोई मतलब नहीं आता है। – Forge

+2

@ जैमी रचनात्मकता;) कोई ऐसी चीज़ से भी सीख सकता है जिसे किसी विशेष तरीके से नहीं किया जाना चाहिए। –

-1

बुरा है आप कोई रिक्तियां प्रिंट होगा। i-- को i ++

for (i = n; i >= 0; i--)

+0

आप इतने सारे डैश प्रिंट करेंगे। इसके अलावा, यह करने के लिए यह एक भयानक तरीका है। मानक बहुत अधिक नहीं है, और निर्विवाद रूप से थोड़ा अस्पष्ट है। –

+4

यह कोई डैश प्रिंट नहीं करेगा, जैसा कि हर किसी ने समझाया है। इसके अलावा, आपने मेरा नाम गलत लिखा है। –

+0

ओह, आप सही हैं। इसके बारे में क्षमा करें, दोनों मायने रखता है। यह एक पहेली बनाने के लिए –

2

बदलें: आप या तो जैमे वोंग समाधान के साथ जा सकते हैं या कर सकते हैं। i-- शुरू होने वाले मान में कमी 0 है और बाद में कटौती 20 (या +20) तक नहीं पहुंच जाएगी।

26

यह एक क्लासिक पहेली है!

तरह से मैंने देखा कि यह

था "आप केवल बदल सकते हैं/सम्मिलित/बनाने के लिए कोड में एक चरित्र को नष्ट - प्रिंट 20 बार"।

कुछ जवाब हैं (अगर मैं उन्हें सही ढंग से याद है)

1)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; -i < n; i--) 
      printf("-"); 
     return 0; 
    } 

यहाँ आप i < n-i < n को

2)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; n--) 
      printf("-"); 
     return 0; 
    } 

बदलने यहाँ आप बदल i-- से n--

3)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i + n; i--) 
      printf("-"); 
     return 0; 
    } 

आप i < ni+n लिए बदल जाते हैं।

एक चुनौती के लिए, इसे एक वर्ण बदलने/डालने/हटाने का प्रयास करें ताकि इसे प्रिंट किया जा सके - बार। (अगर आप इसे आजमा देना चाहते हैं तो इस जवाब में टिप्पणियां न पढ़ें!)

+3

+1। अच्छा जवाब जवाब दिया। –

+1

चुनौती मजेदार थी;) खुशी है कि मैंने जवाब देने की कोशिश करने से पहले टिप्पणियों को नहीं देखा। –

1

आप इस समस्या से क्या करने की कोशिश कर रहे हैं ??? यहां आप एक वैरिएबल के वैल्यू को कम करने की कोशिश कर रहे हैं .. एक वेरिएबल जिसका मूल्य कभी भी इस शर्त तक नहीं पहुंच जाएगा (i < 20) आपने प्रदान किया है ... इसलिए यह प्रिंटिंग '-' पर तब तक जारी रहेगा जब तक जैमी वोंग निर्दिष्ट नहीं है, यानी i= -2^31। यह + हो जाएगा। मैंने अभी इस कार्यक्रम की कोशिश की।

#include <stdio.h> 
int main() 
{ 
    int i; 
    int n = 20; 
    for(i = 0; i < n; i--) 
     printf("-"); 
    return 0; 
} 

सवाल आपसे पूछा के अनुसार, i वृद्धि होना चाहिए, जैसे i++i-- के बजाय।

@jamie वोंग: thanx tht एक wraparound बारे में एक नई बात man..learnt ....