आपका कोड लूप जब तक यह एक शब्द भी पढ़ता है, तो बाहर निकल जाता है (ठीक है, वास्तव में क्या मैं उत्पादन में प्रयोग करेंगे tr -s '[:space:]' '\n'
है, लेकिन यह कैसे आप ऐसा ही कुछ को लागू है।)। तो यदि आप इसे कई शब्द देते हैं तो यह पहला और बाहर निकल जाएगा, जबकि यदि आप इसे एक खाली इनपुट देते हैं, तो यह हमेशा के लिए लूप होगा। किसी भी मामले में, यह केवल यादृच्छिक स्मृति से यादृच्छिक कचरा मुद्रित करेगा। यह स्पष्ट रूप से नहीं है कि आप क्या चाहते हैं, लेकिन आप क्या चाहते हैं? तुम सिर्फ पढ़ सकते हैं और पहला शब्द प्रिंट (यदि वह मौजूद है) चाहते हैं, का उपयोग करता है, तो:
if (scanf("%15s", word) == 1)
printf("%s\n", word);
यदि आप पाश जब तक आप एक शब्द पढ़ सकते हैं करना चाहते हैं, का उपयोग करते हुए:
while (scanf("%15s", word) == 1)
printf("%s\n", word);
char word[16];
दूसरों के बजाय जाँच कई मदों से मिलान कैसे scanf का EOF के लिए परीक्षण का सुझाव दिया है:
इसके अलावा, के रूप में दूसरों का उल्लेख किया है, तो आप शब्द सरणी एक आकार है कि आपके scanf के लिए काफी बड़ा है देने के लिए की जरूरत है। इस मामले के लिए यह ठीक है, जहां स्कैनफ एक ईओएफ होने तक मेल नहीं कर सकता है, लेकिन अन्य मामलों में इतना अच्छा नहीं है (जैसे पूर्णांक पढ़ने की कोशिश कर रहा है), जहां स्कैनफ़ ईओएफ तक पहुंचने के बिना कुछ भी नहीं मिल सकता है (यदि इनपुट नहीं है ' टी संख्या) और वापसी 0।
संपादित
ऐसा लगता है कि मेरे कोड है जो ठीक काम करता है जब मैं इसे चलाने के मैच के लिए अपने प्रश्न बदल गया है - शब्द पढ़ने छोरों तक EOF तक पहुँच जाता है और फिर बाहर निकालता है। तो कुछ और ही अपने कोड के साथ हो रहा है, शायद इनपुट आप इसे कैसे खिला रहे हैं से संबंधित के रूप में डेविड
ने सुझाव दिया
स्रोत
2010-09-22 16:24:32
आप किस इनपुट का उपयोग कर रहे हैं? क्या आप एक फ़ाइल को 'stdin' पर रीडायरेक्ट कर रहे हैं, या कंसोल पर टाइप कर रहे हैं? यदि उत्तरार्द्ध, आप किस ओएस का उपयोग कर रहे हैं और आप ईओएफ में कैसे टाइप कर रहे हैं? –