यह स्टैक ओवरफ़्लो पर मेरी पहली पोस्ट है, इसलिए मुझे आशा है कि मैं किसी के पैर की उंगलियों पर कदम नहीं उठाऊंगा।के एंड आर: अध्याय 6 - क्यों getword() फ़ंक्शन ईओएफ नहीं पढ़ता है?
बेशक, सभी इनपुट का स्वागत है और सराहना की जाती है, लेकिन उत्तर देने के लिए सबसे उपयुक्त उन लोगों को वास्तव में पुस्तक, सी प्रोग्रामिंग भाषा, दूसरा संस्करण पढ़ा होगा।
मैंने अभी व्यायाम 6-4 कोडिंग समाप्त कर दिया है, लेकिन मुझे कुछ पता लगाना प्रतीत नहीं होता है। Getword() फ़ंक्शन EOF को तब तक नहीं पढ़ता जब तक कि मैं Ctrl + D दबाता हूं (एक आर्क लिनक्स वीएम में सी में कोड)?
पुस्तक से मेरे पिछले अभ्यासों में से कई को stdin से पढ़ने की आवश्यकता है। एक तरह से मैं यह कर की तरह
while ((c = getchar()) != EOF) {...}
ऐसे मामलों में कुछ के माध्यम से है, मैं Ctrl + D प्रेस करने की आवश्यकता नहीं है। मैं अपने इनपुट में प्रवेश करता हूं, एंटर दबाता हूं, stdin buffer बाहर निकल जाता है, और ईओएफ स्वचालित रूप से पता चला है। Getword() फ़ंक्शन भी getchar() पर अपने आधार पर निर्भर करता है, तो यह मेरे प्रोग्राम को क्यों लटकाता है?
getword() फ़ंक्शन से कहा जाता है मुख्य():
while (getword(word, MAX_WORD) != EOF) {
if (isalpha(word[0])) {
root = addtree(root, word);
}
}
getword() फ़ंक्शन में ही:
int getword(char *word, int lim) {
char *w = word;
int c;
while (isspace(c = getch())) {
}
if (c != EOF) {
*w++ = c;
}
// This point is reached
if (!isalpha(c)) {
// This point is never reached before Ctrl+D
*w = '\0';
return c;
}
for (; --lim > 0; w++) {
if (!isalnum(*w = getch())) {
ungetch(*w);
break;
}
}
*w = '\0';
return word[0];
}
मैं टिप्पणी नहीं डाल बिंदु मैं कहाँ निर्धारित EOF है कि इंगित करने के लिए पढ़ा नहीं जा रहा है।
getch() और ungetch() फ़ंक्शन एक ही अध्याय 4 से पोलिश संकेतन कैलक्यूलेटर में उपयोग किए जाते हैं (और उस प्रोग्राम स्वचालित रूप से EOF पढ़ने में सक्षम था - दबाकर दर्ज):
#define BUF_SIZE 100
char buf[BUF_SIZE];
int bufp = 0;
int getch(void) {
return (bufp > 0) ? buf[--bufp] : getchar();
}
void ungetch(int c) {
if (bufp >= BUF_SIZE) {
printf("ungetch: too many characters\n");
}
else {
buf[bufp++] = c;
}
}
इस प्रकार अब तक, यह पहला कार्यक्रम है जिसे मैंने इस पुस्तक की शुरुआत के बाद लिखा था जिसके लिए मुझे मैन्युअल रूप से Ctrl + D के माध्यम से EOF दर्ज करना आवश्यक है। मुझे लगता है कि क्यों नहीं लग रहा है। स्पष्टीकरण के लिए पहले से
बहुत सराहना ...
कोड प्रारूपित करने के लिए, इसे हाइलाइट करें और '{} 'आइकन पर क्लिक करें। यह 4 रिक्त स्थान पर हाइलाइट किए गए क्षेत्र को इंडेंट करता है, इस प्रकार "मार्कडाउन" स्रोत कोड इंगित करता है। यह भी देखें [संपादन सहायता पृष्ठ] (http://stackoverflow.com/editing-help)। मैंने इसे आपके लिए तय कर लिया है। और Stackoverflow में आपका स्वागत है! –