मैं fscanf/fprintf w/%c का उपयोग करके सीधे एक टेक्स्ट फ़ाइल से दूसरे टेक्स्ट फ़ाइल में वर्णों की प्रतिलिपि बनाने का प्रयास कर रहा हूं लेकिन मुझे फ़ाइल के बहुत अंत में एक अतिरिक्त सफेद स्पेस कैरेक्टर के साथ छोड़ा जा रहा है।

क्या कोई तरीका है कि मैं आउटपुट फ़ाइल से अंतिम व्हाइटस्पेस वर्ण को ट्रिम कर सकता हूं या मेरे फ़ंक्शन को अंतिम सफेद स्थान को अनदेखा करने के लिए कह सकता हूं?

इसके अलावा मेरी बाधाएं तय करती हैं कि मुझे किसी भी पढ़े गए पात्रों को पार्स करने के लिए सरणी का उपयोग करने की अनुमति नहीं है। मेरे प्रोग्राम को सीधे इनपुट फ़ाइल से आउटपुट फ़ाइल में पढ़ने और कॉपी करने की आवश्यकता है।

यहाँ मेरा कोड नीचे है।

void copyFile(FILE* inputStream, FILE* outputStream){
   
   while(!feof(inputStream)) {
      int readCorrectly;
      char readChar;
      
      
      readCorrectly = fscanf(inputStream, "%c", &readChar);
      
      
      if (readCorrectly) {
         fprintf(outputStream, "%c", readChar);
      }  
   }
}
2
ryancasey1991 23 नवम्बर 2020, 01:27

1 उत्तर

सबसे बढ़िया उत्तर

यहां समस्या यह है कि जब आप फ़ाइल के अंत से पहले पढ़ने का प्रयास करते हैं तो एंड-ऑफ-फाइल इंडिकेटर सेट हो जाता है।

इसे हल करने के लिए, आपको fscanf के बाद चेक जोड़ना होगा। जैसे

if (feof(inputStream)) {
    break;
}

ऐसा करने पर, आप अपनी स्थिति को अनंत लूप, यानी while (1) से भी बदल सकते हैं।

feof कैसे काम करता है, इसके बारे में और स्पष्टीकरण यहां दिए गए हैं: C में feof() कैसे काम करता है

0
costaparas 1 पद 2020, 10:04