2012-02-24 18 views
10

मैं प्रारूपपढ़ना

1 32 43 23 
32 43 
123 43 54 243 
123 2222 
2 

की फ़ाइल से पढ़ रहा हूँ यहाँ मेरे कोड का टुकड़ा है।

string[100]; 
while(!feof(fp)) 
fgets(string,100,fp) 

अब जब मैं प्रत्येक स्ट्रिंग डालता हूं, आखिरी स्ट्रिंग में मुझे पुनरावृत्ति मिल रही है। और कुछ और अस्पष्टताएं (जैसे कुछ और मुद्रित हो जाता है 123 या तो कहते हैं)।

इस समस्या को हल करने के लिए कैसे करें?

+0

वहाँ एक अंत के लाइन '\ आपकी फ़ाइल में अंतिम पंक्ति के अंत में n' चरित्र है? – dasblinkenlight

+2

अपना पूरा वास्तविक कोड पोस्ट करें, इसे संकलित भी नहीं करना चाहिए। – Staven

उत्तर

17

आपको fgets का वापसी मूल्य जांचना होगा। यदि कोई पठन सफल रहा है, तो fgets आपके द्वारा पारित बफर में पॉइंटर लौटाता है (यानी string आपके उदाहरण में)। अगर एंड-ऑफ-फाइल का सामना करना पड़ता है और कोई वर्ण नहीं पढ़ा गया है, तो fgetsNULL देता है।

इस प्रयास करें:

char string[100]; 
while(fgets(string, 100, fp)) { 
    printf("%s\n", string); 
} 
+0

अगर fgets ऐसा करता है तो आप फीफ के साथ क्यों परीक्षण करेंगे? –

+2

@ManuelReis आप सही हैं, 'feof' test s अनावश्यक (संपादित)। – dasblinkenlight

+1

उत्तर के लिए धन्यवाद, मुझे एक सेकंड के लिए अस्तित्व में संकट हो रहा था। –

5

eofपर पहुंच गया है के बाद आप अंत में एक फ़ाइल से पढ़ने का प्रयास कर चुके हैं।

char string[100]; 
while(fgets(string, 100, fp)) 
    // do stuff with string 

इस तरह वापसी मान जाँच हो रही है तुम कभी नहीं का कारण होगा अंदर EOF हिट करने के लिए: आप (जो EOF या त्रुटि और सूचक यह अन्यथा दिया जाता है पर NULL रिटर्न) fgets बजाय वापसी मान का उपयोग करना लूप का शरीर, दूसरे की तरह, स्थिति की बजाय।

संबंधित मुद्दे