C में getchar का उपयोग कैसे करें: अक्षर इनपुट के लिए शुरुआती गाइड और व्यावहारिक उदाहरण

目次

1. getchar फ़ंक्शन क्या है?

getchar फ़ंक्शन C में बुनियादी इनपुट फ़ंक्शनों में से एक है, जिसका उपयोग मानक इनपुट से एकल अक्षर पढ़ने के लिए किया जाता है। यह फ़ंक्शन उपयोगकर्ता द्वारा कीबोर्ड से एक अक्षर दर्ज करने की प्रतीक्षा करता है, फिर उस अक्षर का ASCII कोड लौटाता है। यह सरल इनपुट ऑपरेशनों के लिए उपयोगी है, जैसे उपयोगकर्ता इनपुट को एक‑एक अक्षर करके प्रोसेस करना।

getchar की विशेषताएँ

  • मानक इनपुट से एक अक्षर पढ़ता है : यह इनपुट की पुष्टि (Enter दबाने) तक प्रतीक्षा करता है, और फिर इनपुट को प्रोसेस करता है।
  • ASCII कोड लौटाता है : अक्षर को उसके ASCII कोड के रूप में लौटाया जाता है, न कि स्वयं अक्षर के रूप में। आपको इसे अक्षर के रूप में उपयोग करने के लिए कास्ट करना पड़ सकता है।

getchar सरल उपयोगकर्ता इनपुट ऑपरेशनों और इंटरैक्टिव प्रोग्रामों के लिए आदर्श है। अन्य इनपुट फ़ंक्शनों की तुलना में इसका उपयोग आसान होने के कारण, यह C सीखने के शुरुआती चरणों में अक्सर प्रयोग किया जाता है।

उदाहरण उपयोग

नीचे getchar का एक सरल उदाहरण दिया गया है:

#include <stdio.h>

int main() {
    int c;
    printf("Please enter a character: ");
    c = getchar();
    printf("Entered character: %cn", c);
    return 0;
}

इस प्रोग्राम में कीबोर्ड से दर्ज किया गया अक्षर पढ़ा जाता है और स्क्रीन पर प्रदर्शित किया जाता है। उदाहरण के लिए, यदि आप "A"पुट करते हैं, तो आउटपुट होगा:

Please enter a character: A
Entered character: A

2. getchar का बुनियादी उपयोग

कॉल करने का तरीका

आप getchar फ़ंक्शन को नीचे दिखाए अनुसार कॉल कर सकते हैं:

int getchar(void);

यह फ़ंक्शन कोई आर्ग्यूमेंट नहीं लेता, एक अक्षर पढ़ता है, और उसका ASCII कोड एक पूर्णांक (int) के रूप में लौटाता है। यदि कोई त्रुटि होती है, तो यह EOF (End Of File) लौटाता है।

सरल अक्षर इनपुट उदाहरण

जैसा कि ऊपर दिखाया गया है, आप getchar का उपयोग करके एकल अक्षर प्राप्त कर सकते हैं और उसे स्क्रीन पर प्रदर्शित कर सकते हैं। यह तब उपयोगी होता है जब आपको केवल एक अक्षर संभालना हो।

#include <stdio.h>

int main() {
    int c;
    printf("Please enter a character: ");
    c = getchar();
    printf("Entered character: %cn", c);
    return 0;
}

यह कोड getchar से इनपुट अक्षर पढ़ता है और printf के साथ उसे प्रदर्शित करता है।

侍エンジニア塾

3. getchar का उन्नत उपयोग

EOF (End Of File) और getchar

getchar फ़ंक्शन केवल अक्षर नहीं पढ़ता, बल्कि जब इनपुट का अंत पहुँचता है तो EOF भी लौटाता है। उदाहरण के लिए, आप मानक इनपुट पर “Ctrl+Z” (Windows) या “Ctrl+D” (Unix) दर्ज करके EOF का पता लगा सकते हैं।

नीचे दिया गया उदाहरण EOF दर्ज होने तक अक्षर पढ़ता रहता है:

#include <stdio.h>

int main() {
    int c;
    printf("Enter characters (end with EOF): ");
    while ((c = getchar()) != EOF) {
        putchar(c);
    }
    return 0;
}

यह कोड getchar और putchar का उपयोग करके इनपुट अक्षरों को तब तक इको करता है जब तक EOF नहीं मिल जाता।

कई अक्षर पढ़ना

आप getchar का उपयोग करके कई अक्षर भी पढ़ सकते हैं। निम्नलिखित कोड प्रत्येक अक्षर को पढ़ता और प्रदर्शित करता है जब तक नई पंक्ति (newline) नहीं दर्ज की जाती:

#include <stdio.h>

int main() {
    int c;
    printf("Please enter a string: ");
    while ((c = getchar()) != 'n') {
        printf("Entered character: %cn", c);
    }
    return 0;
}

यह प्रोग्राम getchar से प्रत्येक अक्षर पढ़ता है और उसे तब तक प्रदर्शित करता है जब तक नई पंक्ति अक्षर ('\n') नहीं मिल जाता।

4. EOF और बफ़र हैंडलिंग

EOF की भूमिका

EOF (End Of File) फ़ाइल या मानक इनपुट से इनपुट के अंत को दर्शाता है। जब getchar EOF तक पहुँचता है, तो यह -1 लौटाता है, जिससे आपका प्रोग्राम अंत का पता लगा कर प्रोसेसिंग समाप्त कर सकता है। कीबोर्ड पर आप विशेष कुंजी संयोजन से EOF भेज सकते हैं।

बफ़रिंग और getchar

getchar फ़ंक्शन इनपुट बफ़रिंग का उपयोग करता है, इसलिए दर्ज किए गए सभी अक्षर एक बफ़र में संग्रहीत होते हैं। जब आप getchar को कई बार कॉल करते हैं, तो यह बफ़र में अगला अक्षर लौटाता है। प्रोग्राम तब तक नहीं आगे बढ़ता जब तक नई पंक्ति दर्ज नहीं की जाती।

बफ़र में नई पंक्ति अक्षर को अनदेखा करने के लिए आप नीचे दिखाए अनुसार कोड का उपयोग कर सकते हैं:

#include <stdio.h>

int main() {
    int c;
    printf("Please enter a character: ");
    c = getchar();
    while (getchar() != 'n');  // Ignore the newline character in the buffer
    printf("Entered character: %cn", c);
    return 0;
}

यह कोड यह सुनिश्चित करता है कि नई पंक्ति (newline) अक्षर को बफ़र से पढ़ा और त्याग दिया जाए, इनपुट अक्षर को प्रदर्शित करने से पहले।

5. getchar की अन्य इनपुट फ़ंक्शनों से तुलना

getchar और scanf के बीच अंतर

getchar और scanf दोनों इनपुट प्राप्त करने के लिए उपयोग किए जाते हैं, लेकिन उनका उपयोग और अनुप्रयोग अलग-अलग है। scanf फ़ॉर्मेट स्पेसिफ़ायर का उपयोग करके विभिन्न डेटा प्रकारों (जैसे पूर्णांक, फ्लोटिंग‑पॉइंट संख्या, स्ट्रिंग) को इनपुट करता है। इसके विपरीत, getchar केवल मानक इनपुट से एक ही अक्षर पढ़ता है।

उदाहरण: scanf के साथ इनपुट

#include <stdio.h>

int main() {
    int num;
    printf("Please enter a number: ");
    scanf("%d", &num);
    printf("Entered number: %dn", num);
    return 0;
}

यह कोड scanf का उपयोग करके एक पूर्णांक इनपुट लेता है और उसे प्रदर्शित करता है। scanf कई डेटा प्रकारों को समर्थन देता है और एक साथ कई मान पढ़ सकता है।

getchar और fgets के अंतर

getchar के विपरीत, fgets मानक इनपुट से एक ही बार में कई अक्षर (एक स्ट्रिंग) पढ़ता है। fgets पूरी पंक्तियों को पढ़ने के लिए उपयोगी है और आपको बफ़र आकार निर्दिष्ट करने की अनुमति देता है, जिससे scanf की तुलना में बफ़र ओवरफ़्लो का जोखिम कम हो जाता है।

उदाहरण: fgets के साथ इनपुट

#include <stdio.h>

int main() {
    char str[100];
    printf("Please enter a string: ");
    fgets(str, sizeof(str), stdin);
    printf("Entered string: %s", str);
    return 0;
}

यह कोड fgets का उपयोग करके एक स्ट्रिंग प्राप्त करता है और उसे प्रदर्शित करता है। fgets नई पंक्ति (newline) अक्षर तक पढ़ता है, जिससे यह बहु‑पंक्ति इनपुट के लिए उपयुक्त बनता है।

कब उपयोग करें getchar, scanf, और fgets

  • getchar का उपयोग एकल अक्षर इनपुट के लिए किया जाता है, जैसे मेनू चयन या की‑प्रेस को संभालना।
  • scanf कई डेटा प्रकारों को प्राप्त करने के लिए उपयुक्त है, लेकिन इसमें त्रुटि जाँच की आवश्यकता होती है।
  • fgets लंबी स्ट्रिंग या बहु‑पंक्ति इनपुट के लिए सुविधाजनक है और पढ़े जाने वाले अक्षरों की संख्या सीमित करके बफ़र ओवरफ़्लो को रोकता है।

6. व्यावहारिक उदाहरण: getchar का उपयोग करके इंटरैक्टिव प्रोग्राम

getchar फ़ंक्शन अक्सर इंटरैक्टिव प्रोग्रामों में उपयोग किया जाता है जो उपयोगकर्ता इनपुट को संभालते हैं। नीचे एक उदाहरण है जहाँ कुंजी इनपुट के आधार पर विशिष्ट क्रियाएँ की जाती हैं, जो सरल गेम या मेनू सिस्टम बनाने में मददगार हो सकता है।

नमूना कोड: अक्षर इनपुट के आधार पर मेनू ऑपरेशन

#include <stdio.h>

int main() {
    char choice;
    printf("Select a menu (a: Hello, b: Exit): ");
    choice = getchar();

    switch (choice) {
        case 'a':
            printf("Hello!n");
            break;
        case 'b':
            printf("Exiting the program.n");
            break;
        default:
            printf("Invalid selection.n");
    }

    return 0;
}

इस प्रोग्राम में, उपयोगकर्ता ‘a’ या ‘b’ दर्ज करता है ताकि एक विशिष्ट संदेश प्रदर्शित हो। getchar आपको सरल मेनू बनाने और उपयोगकर्ता इनपुट के आधार पर क्रियाएँ करने की अनुमति देता है।

उन्नत प्रोग्राम: कई कमांड्स को संभालना

निम्नलिखित कोड दिखाता है कि जब उपयोगकर्ता कुछ विशेष अक्षर दर्ज करता है तो कैसे विशिष्ट क्रियाएँ निष्पादित की जाती हैं:

#include <stdio.h>

int main() {
    char command;
    printf("Enter a command (l: Show list, h: Greet, q: Exit): ");
    command = getchar();

    switch (command) {
        case 'l':
            printf("Showing list.n");
            break;
        case 'h':
            printf("Hello!n");
            break;
        case 'q':
            printf("Exiting the program.n");
            break;
        default:
            printf("Invalid command.n");
    }

    return 0;
}

यह प्रोग्राम उपयोगकर्ता द्वारा निर्दिष्ट कमांड (l, h, या q) दर्ज करने पर संबंधित क्रिया को निष्पादित करता है।

7. getchar के लिए टिप्स और सर्वोत्तम प्रथाएँ

सामान्य समस्या: बफ़र को संभालना

getchar के साथ एक बात का ध्यान रखना है कि बफर में बची हुई डेटा अगले इनपुट को प्रभावित कर सकती है। उदाहरण के लिए, getchar को एक बार कॉल करने के बाद, बची हुई न्यूलाइन कैरेक्टर को अगले getchar द्वारा उठाया जा सकता है। इससे बचने के लिए, आवश्यकतानुसार बफर को साफ करें।

न्यूलाइन कैरेक्टर को अनदेखा कैसे करें:

#include <stdio.h>

int main() {
    int c;
    printf("Please enter a character: ");
    c = getchar();
    while (getchar() != 'n');  // Skip the newline character
    printf("Entered character: %cn", c);
    return 0;
}

यह कोड getchar इनपुट के बाद बफर में बचे न्यूलाइन कैरेक्टर को त्यागने के लिए एक while लूप का उपयोग करता है।

सर्वोत्तम प्रथाएँ

  1. बफर को साफ करें : न्यूलाइन कैरेक्टर को संभालें ताकि यह अगले इनपुट को प्रभावित न करे।
  2. त्रुटि हैंडलिंग : जांचें कि getchar का रिटर्न वैल्यू EOF है या नहीं और उचित रूप से संभालें, विशेष रूप से फाइलों से पढ़ते समय।
  3. इनपुट को सीमित करें : लंबी स्ट्रिंग्स या विशिष्ट इनपुट आवश्यकताओं के साथ काम करते समय, getchar के बजाय fgets का उपयोग करने पर विचार करें। fgets आपको बफर ओवरफ्लो से बचने के लिए बफर साइज निर्दिष्ट करने की अनुमति देता है।

8. सारांश और अगले कदम

इस लेख ने getchar फंक्शन के बेसिक्स और एडवांस्ड उपयोग की व्याख्या की, जिसमें scanf और fgets के साथ तुलनाओं को शामिल किया गया, और C भाषा इनपुट हैंडलिंग के महत्वपूर्ण बिंदुओं को कवर किया। getchar विभिन्न स्थितियों के लिए एक सरल लेकिन शक्तिशाली टूल है, विशेष रूप से इंटरएक्टिव प्रोग्राम्स या सरल कैरेक्टर इनपुट हैंडलिंग के लिए उपयुक्त।

सीखने के लिए अगले कदम

  1. fgets और scanf को और अधिक एक्सप्लोर करें : यदि आप स्ट्रिंग्स या नंबर्स को हैंडल करना चाहते हैं, तो fgets और scanf के बारे में अधिक सीखना लाभदायक है।
  2. फाइल इनपुट उपयोग : getchar का उपयोग फाइलों से डेटा पढ़ने के लिए भी किया जा सकता है, न केवल स्टैंडर्ड इनपुट से। फाइल I/O के बारे में सीखना आपकी स्किल्स को व्यापक बनाएगा।
  3. त्रुटि हैंडलिंग का अभ्यास करें : इनपुट के लिए मजबूत त्रुटि हैंडलिंग लागू करें, विशेष रूप से EOF और अमान्य इनपुट्स के लिए, अधिक विश्वसनीय प्रोग्राम लिखने के लिए।

जैसे ही आपको C के बेसिक्स की अच्छी समझ हो जाए, इन अवधारणाओं की समझ को गहरा करना आपको अधिक व्यावहारिक प्रोग्राम विकसित करने में मदद करेगा।

侍エンジニア塾