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

C भाषा में scanf() फंक्शन की सामान्य त्रुटि


सामान्य त्रुटि

scanf() से संख्यात्मक डेटा पढ़ने के बाद स्ट्रिंग पढ़ने पर इनपुट छोड़ दिया जाता है।

कारण

scanf("%d", &num) संख्या पढ़ता है लेकिन अनुगामी नई लाइन (\n) इनपुट बफर में छोड़ देता है। अगला gets() या scanf("%s") उस \n को देखता है और तुरंत लौट आता है।

त्रुटिपूर्ण कोड


#include <stdio.h>

struct Student {
    char name[10];
    int roll;
};

int main() {
    struct Student s;
    
    printf("रोल नंबर: ");
    scanf("%d", &s.roll);  // \n बफर में रह जाता है
    
    printf("नाम: ");
    gets(s.name);  // \n देखता है, खाली स्ट्रिंग पढ़ता है
    
    printf("रोल: %d, नाम: %s\n", s.roll, s.name);
    return 0;
}

आउटपुट

रोल नंबर: 3
नाम: 
रोल: 3, नाम: 

समाधान


// विधि 1: अस्थायी char
scanf("%d", &s.roll);
getchar();  // या scanf("%c", &temp);  // \n खपत

// विधि 2: fgets() उपयोग करें (सर्वोत्तम)
fgets(s.name, sizeof(s.name), stdin);
s.name[strcspn(s.name, "\n")] = '\0';

// विधि 3: scanf में स्पेस
scanf(" %9[^\n]", s.name);  // अग्रणी स्पेस व्हाइटस्पेस छोड़ता है

सही प्रोग्राम

#include <stdio.h>
#include <string.h>

struct Student {
    char name[50];
    int roll;
};

int main() {
    struct Student s;
    char line[100];
    
    printf("रोल नंबर: ");
    fgets(line, sizeof(line), stdin);
    sscanf(line, "%d", &s.roll);
    
    printf("नाम: ");
    fgets(s.name, sizeof(s.name), stdin);
    s.name[strcspn(s.name, "\n")] = '\0';
    
    printf("\n--- छात्र जानकारी ---\n");
    printf("रोल नंबर: %d\n", s.roll);
    printf("नाम: %s\n", s.name);
    
    return 0;
}

आउटपुट

रोल नंबर: 3
नाम: TutorialsPoint

--- छात्र जानकारी ---
रोल नंबर: 3
नाम: TutorialsPoint

scanf() रिटर्न मान जांचना

scanf() सफलतापूर्वक पढ़े गए आइटम्स की संख्या लौटाता है। हमेशा जांचें:


if (scanf("%d", &n) != 1) {
    // त्रुटि: इनपुट पूर्णांक नहीं था
    // बफर साफ करें
    while (getchar() != '\n');
}

सारांश: इनपुट हैंडलिंग चेकलिस्ट

  • ✅ gets() कभी उपयोग न करें
  • ✅ fgets() + sscanf() पसंद करें
  • ✅ scanf() रिटर्न मान जांचें
  • ✅ बफर आकार सीमित करें (%49s, %49[^\n])
  • ✅ मिश्रित इनपुट के लिए पूरी लाइन पढ़कर पार्स करें
  1. Battlefield 2042 खेलते समय EA सर्वर से कनेक्ट करते समय एरर हुआ Battlefield 2042 खेलते समय EA सर्वर से कनेक्ट करते समय एरर हुआ

    क्या आप Battlefield 2042 खेलते समय EA सर्वर से कनेक्ट करने में समस्याओं का सामना कर रहे हैं? यहां एरर को ठीक करने के लिए एक पूर्ण गाइड है। Battlefield 2042 एक हालिया फर्स्ट-पर्सन शूटर गेम है जो पहले से ही लाखों गेमिंग उत्साही लोगों के बीच लोकप्रिय है। यह गेमर्स द्वारा पसंद किया जाता है, हालांकि, इसक

  1. सेटअप चलाते समय एरर [-5005 : 0x80070002] हुई सेटअप चलाते समय एरर [-5005 : 0x80070002] हुई

    यदि जब आप विंडोज 10 में प्रोग्राम्स और फीचर्स एप्लेट के माध्यम से किसी प्रोग्राम को इंस्टॉल करने का प्रयास करते हैं, या विशेष रूप से अनइंस्टॉल करने का प्रयास करते हैं, और एरर संदेश सेटअप चलाते समय एरर [-5005 : 0x80070002] हुई प्राप्त होता है साथ में एरर कोड के साथ, तो यह पोस्ट आपकी मदद करने के लिए ह

  1. विंडोज एरर 2: जावा VM लोड करते समय त्रुटि - समाधान विंडोज एरर 2: जावा VM लोड करते समय त्रुटि - समाधान

    विंडोज एरर 2 जावा VM लोड करते समय त्रुटि आमतौर पर तब होती है जब उपयोगकर्ता लॉन्च एनीवेयर सॉफ़्टवेयर या ऐसे अन्य प्रोग्राम चलाने का प्रयास करता है जिन्हें चलाने के लिए यूज़रनेम और पासवर्ड की आवश्यकता होती है। ऐसा लगता है कि इस समस्या का कारण बनने वाले सभी प्रोग्राम लॉन्च एनीवेयर सॉफ़्टवेयर के समान बै