बफ़र के लिए इनपुट मिलने से पहले '\ n' के लिए इंतजार करता है [डुप्लिकेट]

Jan 02 2021

मैं स्टड से फ़्यूज़ का उपयोग करने की कोशिश कर रहा हूं और यह 'i' टाइप करने के बाद ही स्क्रीन से डेटा एकत्र करना शुरू करता है। '\ n' तक यह अटका हुआ है।

नोट: मेरे पास अपने कोड में कोई भी स्कैनफ़ नहीं है

कोड का प्रासंगिक हिस्सा:

while (reconnect_flag)
    {
        printf("%s\n", RECONNECT_MENU);
        char Input[2] = "";
        fgets(Input, 2, stdin);
    }

जवाब

JonathanLeffler Jan 03 2021 at 22:43

चूंकि fgets()पहले न्यूलाइन (या ईओएफ) तक और सहित डेटा की एक पंक्ति को पढ़ने का इरादा है, यह इरादा के अनुसार व्यवहार कर रहा है।

इसके अतिरिक्त, जब तक आप टर्मिनल सेटिंग्स के साथ कुछ कल्पना नहीं करते हैं, तब तक टर्मिनल से पढ़ रहे कार्यक्रमों में डेटा की लाइन की सामग्री को तब तक नहीं भेजा जाएगा जब तक कि एक नई लाइन हिट न हो जाए। देखें विहित बनाम गैर विहित टर्मिनल इनपुट एक POSIX (यूनिक्स) के नजरिए से अधिक जानकारी के लिए। इसलिए एक चरित्र को पढ़ने की कोशिश करने से fgets(Input, 2, stdin)कोई इनपुट प्राप्त नहीं होगा जब तक कि कोई नई प्रविष्टि दर्ज नहीं की जाती है।

यदि आप उपलब्ध होते ही इनपुट-प्लेटफ़ॉर्म-विशिष्ट APIs के साथ काम करना चाहते हैं। इसका मतलब है कि आप विंडोज पर जो कुछ भी करते हैं वह पॉसिक्स-आधारित सिस्टम पर अलग होगा - लिनक्स सहित यूनिक्स के विभिन्न स्वाद। POSIX- आधारित सिस्टम पर भी, आप cursesलाइब्रेरी का उपयोग कर सकते हैं या आप लो-लेवल सिस्टम कॉल का उपयोग कर सकते हैं, और इसे करने के कई तरीके हैं।