[c] सी में सिंगल चार के लिए स्कैनफ कैसे करें



3 Answers

सबसे पहले, scanf() से बचें। इसका उपयोग दर्द के लायक नहीं है।

देखें: स्कैनफ का उपयोग न करने का हर कोई क्यों कहता है? इसके बजाय मुझे क्या उपयोग करना चाहिए?

scanf() में एक व्हाइटस्पेस वर्ण का उपयोग इनपुट स्ट्रीम में छोड़े गए किसी भी प्रकार के व्हाइटस्पेस वर्णों को अनदेखा कर देगा, यदि आपको अधिक इनपुट पढ़ने की आवश्यकता है तो क्या होगा? विचार करें:

#include <stdio.h>

int main(void)
{
   char ch1, ch2;

   scanf("%c", &ch1);  /* Leaves the newline in the input */
   scanf(" %c", &ch2); /* The leading whitespace ensures it's the
                          previous newline is ignored */
   printf("ch1: %c, ch2: %c\n", ch1, ch2);

   /* All good so far */

   char ch3;
   scanf("%c", &ch3); /* Doesn't read input due to the same problem */
   printf("ch3: %c\n", ch3);

   return 0;
}

जबकि तीसरे स्कैनफ () को एक अग्रणी व्हाइटस्पेस का उपयोग करके उसी तरह तय किया जा सकता है, यह हमेशा ऊपर की तरह सरल नहीं होता है। एक और बड़ी समस्या यह है कि scanf() इनपुट स्ट्रीम में किसी भी इनपुट को त्याग नहीं देगा अगर यह प्रारूप से मेल नहीं खाता है। उदाहरण के लिए, यदि आप int लिए abc इनपुट करते हैं जैसे: scanf("%d", &int_var); तब abc को पढ़ना और त्यागना होगा। विचार करें:

#include <stdio.h>

int main(void)
{
    int i;

    while(1) {
        if (scanf("%d", &i) != 1) { /* Input "abc" */
            printf("Invalid input. Try again\n");
        } else {
            break;
        }
    }

    printf("Int read: %d\n", i);
    return 0;
}

एक और आम समस्या scanf() और fgets() मिश्रण है। विचार करें:

#include <stdio.h>

int main(void)
{
    int age;
    char name[256];
    printf("Input your age:");
    scanf("%d", &age); /* Input 10 */
    printf("Input your full name [firstname lastname]");
    fgets(name, sizeof name, stdin); /* Doesn't read! */
    return 0;
}

fgets() को कॉल इनपुट के लिए इंतजार नहीं करता है क्योंकि पिछले स्कैनफ़ () कॉल द्वारा छोड़ी गई नई लाइन को पढ़ा जाता है और fgets () एक नई लाइन का सामना करते समय इनपुट पढ़ने को समाप्त करता है।

scanf() जुड़े कई अन्य समान समस्याएं हैं। यही कारण है कि इसे आम तौर पर इससे बचने की सिफारिश की जाती है।

तो, विकल्प क्या है? एक वर्ण को पढ़ने के लिए निम्नलिखित फैशन में fgets() फ़ंक्शन का fgets() करें:

#include <stdio.h>

int main(void)
{
    char line[256];
    char ch;

    if (fgets(line, sizeof line, stdin) == NULL) {
        printf("Input error.\n");
        exit(1);
    }

    ch = line[0];
    printf("Character read: %c\n", ch);
    return 0;
}

अगर इनट बफर में पर्याप्त जगह है तो fgets() का fgets() करते समय जागरूक होने के बारे में एक विवरण न्यूलाइन कैरेक्टर में पढ़ा जाएगा। यदि यह वांछनीय नहीं है तो आप इसे हटा सकते हैं:

char line[256];

if (fgets(line, sizeof line, stdin) == NULL) {
    printf("Input error.\n");
    exit(1);
}

line[strcpsn(line, "\n")] = 0; /* removes the trailing newline, if present */
Question

सी में: मैं scanf साथ उपयोगकर्ता से char प्राप्त करने की कोशिश कर रहा हूं और जब मैं इसे चलाता हूं तो प्रोग्राम उपयोगकर्ता को कुछ भी टाइप करने की प्रतीक्षा नहीं करता है ...

यह कोड है:

char ch;
printf("Enter one char");
scanf("%c", &ch);
printf("%c\n",ch);

काम क्यों नहीं कर रहा है?




char तरह स्ट्रिंग का उपयोग करें

char c[10];
scanf ("%s", c);

मुझे विश्वास है कि यह अच्छा काम करता है।




getchar () का उपयोग करने का प्रयास करें; बजाय

वाक्य - विन्यास:

void main() {
    char ch;
    ch = getchar();
}



fflush(stdin); ने fflush(stdin); डालने से पहले fflush(stdin); बफर साफ़ करने के लिए।




Related



Tags

c   char   scanf