Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C में लूप, रिकर्सन और मैक्रो के बिना संख्या 100 बार प्रिंट करना


setjmp और longjmp (<setjmp.h>) का उपयोग करके लूप/रिकर्सन के बिना पुनरावृत्ति प्राप्त की जा सकती है। यह नॉन-लोकल गोटो तंत्र है।

सिंटैक्स

int setjmp(jmp_buf env);     // वर्तमान स्टेट सेव करता है, 0 रिटर्न करता है
void longjmp(jmp_buf env, int val);  // सेव्ड स्टेट पर कूदता है, val रिटर्न करता है

उदाहरण: 100 बार '5' प्रिंट करें

#include <stdio.h>
#include <setjmp.h>

jmp_buf buf;

int main() {
    int count = 1;
    setjmp(buf);  // जंप पॉइंट सेट करें (पहली बार 0 रिटर्न करता है)
    printf("5");
    count++;
    if (count <= 100)
        longjmp(buf, 1);  // buf पर वापस कूदें, 1 रिटर्न करें
    return 0;
}

आउटपुट

5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555

कैसे काम करता है

  1. setjmp(buf) वर्तमान रजिस्टर्स/स्टैक पॉइंटर को buf में सेव करता है, 0 रिटर्न करता है।
  2. printf("5") निष्पादित होता है।
  3. count बढ़ाया जाता है।
  4. longjmp(buf, 1) कंट्रोल को setjmp कॉल पर वापस भेजता है, लेकिन इस बार setjmp 1 रिटर्न करता है।
  5. चरण 2-4 दोहराते हैं जब तक count > 100 नहीं हो जाता।

चेतावनियां

  • खराब अभ्यास: यह स्पेगेटी कोड बनाता है, डीबगिंग कठिन होती है।
  • रिसोर्स लीक: longjmp स्टैक अनवाइंडिंग नहीं करता - लोकल ऑब्जेक्ट्स के डिस्ट्रक्टर्स (C++) या क्लीनअप कोड नहीं चलते।
  • सिग्नल हैंडलर्स: केवल sigsetjmp/siglongjmp सिग्नल हैंडलर्स में सुरक्षित हैं।
  • केवल शैक्षणिक: वास्तविक कोड में लूप्स उपयोग करें।
  1. C++ प्रोग्राम: रिकर्सन के बिना रूट-टू-लीफ पथ प्रिंट करना C++ प्रोग्राम: रिकर्सन के बिना रूट-टू-लीफ पथ प्रिंट करना

    दिए गए बाइनरी ट्री में प्रोग्राम को रूट से लीफ तक के कई पथ ढूंढने होंगे जिसका अर्थ है सभी पथ प्रिंट होने चाहिए लेकिन चुनौती यह है कि रिकर्सन के बिना करना है। हम ट्री को पुनरावृत्त रूप से ट्रैवर्स करेंगे क्योंकि बाधा यह है कि इसे रिकर्सन के बिना करना है। इसलिए इसे प्राप्त करने के लिए हम एक STL मैप का

  1. पायथन प्रोग्राम: बिना किसी लूप के नंबर सीरीज़ प्रिंट करें पायथन प्रोग्राम: बिना किसी लूप के नंबर सीरीज़ प्रिंट करें

    इस लेख में, हम नीचे दिए गए प्रॉब्लम स्टेटमेंट के समाधान के बारे में सीखेंगे: प्रॉब्लम स्टेटमेंट दो संख्याएं N और K दी गई हैं, हमारी समस्या है N से K घटाते रहना जब तक N शून्य से बड़ा है, एक बार N नेगेटिव या शून्य हो जाए तो हम इसमें K जोड़ना शुरू करते हैं जब तक वह संख्या मूल संख्या N नहीं बन जाती। उ

  1. पायथन प्रोग्राम: बिना किसी लूप के संख्या श्रृंखला प्रिंट करें पायथन प्रोग्राम: बिना किसी लूप के संख्या श्रृंखला प्रिंट करें

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे -समस्या कथन - दो संख्याएं N और K दी गई हैं, हमारी समस्या है कि N से K को तब तक घटाएं जब तक N शून्य (0) से बड़ा है, एक बार N ऋणात्मक या शून्य हो जाए तो हम इसमें K जोड़ना शुरू करते हैं जब तक कि वह संख्या मूल संख्या (N) न बन जाए।उदाहरण