" कैसे दबाने से बचने के लिए Enterके साथ getchar()
? "
सबसे पहले, टर्मिनल इनपुट या तो लाइन या पूरी तरह से बफर होता है। इसका मतलब है कि ऑपरेशन सिस्टम टर्मिनल से वास्तविक इनपुट को एक बफर में संग्रहीत करता है। आमतौर पर इस बफ़र को प्रोग्राम में फ़्लश किया जाता है जब फ़े \n
को संकेतित किया जाता है / प्रदान किया जाता है stdin
। यह एक प्रेस द्वारा बनाई गई fe है Enter।
getchar()
श्रृंखला के अंत में है। यह वास्तव में बफरिंग प्रक्रिया को प्रभावित करने की कोई क्षमता नहीं है।
" मैं यह कैसे कर सकता हूं? "
getchar()
पहली जगह में खाई , यदि आप टर्मिनल के व्यवहार को स्पष्ट रूप से बदलने के लिए विशिष्ट प्रणाली कॉल का उपयोग नहीं करना चाहते हैं जैसे कि अन्य उत्तर में अच्छी तरह से समझाया गया है।
दुर्भाग्य से कोई मानक पुस्तकालय फ़ंक्शन नहीं है और इसके साथ ही एकल चरित्र इनपुट पर बफर को फ्लश करने का कोई पोर्टेबल तरीका नहीं है। हालांकि, कार्यान्वयन-आधारित और गैर-पोर्टेबल समाधान हैं।
विंडोज / एमएस-डॉस में, हेडर फ़ाइल में फ़ंक्शन getch()
और getche()
फ़ंक्शन होते हैं conio.h
, जो बिल्कुल वही काम करते हैं जो आप चाहते हैं - बफर को फ्लश करने के लिए नई लाइन की प्रतीक्षा करने की आवश्यकता के बिना एक भी चरित्र पढ़ें।
के बीच मुख्य अंतर getch()
और getche()
वह यह है कि getch()
जबकि, कंसोल में नहीं तुरंत उत्पादन वास्तविक इनपुट चरित्र करता getche()
है। प्रतिध्वनि"e"
के लिए अतिरिक्त खड़ा है ।
उदाहरण:
#include <stdio.h>
#include <conio.h>
int main (void)
{
int c;
while ((c = getche()) != EOF)
{
if (c == '\n')
{
break;
}
printf("\n");
}
return 0;
}
लिनक्स, प्रत्यक्ष चरित्र प्रसंस्करण और उत्पादन प्राप्त करने के लिए एक तरह से उपयोग करने के लिए है cbreak()
और echo()
विकल्प और getch()
और refresh()
ncurses-पुस्तकालय में दिनचर्या।
ध्यान दें, कि आपको तथाकथित मानक स्क्रीन को आरंभीकरण के साथ initscr()
बंद करने की आवश्यकता है endwin()
।
उदाहरण:
#include <stdio.h>
#include <ncurses.h>
int main (void)
{
int c;
cbreak();
echo();
initscr();
while ((c = getch()) != ERR)
{
if (c == '\n')
{
break;
}
printf("\n");
refresh();
}
endwin();
return 0;
}
नोट: आपको -lncurses
विकल्प के साथ कंपाइलर को आमंत्रित करना होगा , ताकि लिंकर ncurses-Library को खोज सके और खोज सके।