2010-04-05 18 views
6

मैं जो केवल सामग्री लाइन 123 है num.txt नामक एक पाठ फ़ाइल है पढ़ने के लिए।सी ++ नौसिखिया: एक समारोह के लिए एक fstream पासिंग डेटा

void alt_reader(ifstream &file, char* line){ 
    file.read(line, 3); 
    cout << "First Time: " << line << endl; 
} 

int main() { 
    ifstream inFile; 
    int num; 
    inFile.open("num.txt"); 
    alt_reader(inFile, (char*)&num); 
    cout << "Second Time: " << num << endl; 
} 

उत्पादन होता है:

First Time: 123 
Second Time: 3355185 

आप कैसे एक fstream कि एक समारोह में पढ़ा जाता है अभी भी मुख्य में चर निर्दिष्ट पाने के लिए मदद कर सकते हैं मुझे यह पता लगाने की तो मैं निम्नलिखित है? मैं ऐसा इसलिए कर रहा हूं क्योंकि alt_reader वास्तव में इसके लिए बहुत कुछ है, लेकिन यह वह हिस्सा है जिस पर मैं फंस गया हूं। सहायता के लिए बहुत - बहुत धन्यवाद।

अद्यतन: विधेयक Oneal की टिप्पणी का उपयोग करना, मैं लिखा है

void alt_reader(ifstream &file, stringstream &str, int n){ 
    char buffer[n+1]; 
    file.read(buffer, n); 
    buffer[n] = 0; 
    str << buffer; 
    cout << "First Time: " << buffer << endl; //First Time: 123 
} 

int main() { 
    ifstream inFile; 
    stringstream strm; 
    int num; 
    inFile.open("num.txt"); 
    alt_reader(inFile, strm, 3); 
    cout << "Second Time: " << num << endl; //Second Time: 123 
} 

धन्यवाद। अब क्या है इसके साथ कोई आलोचना?

उत्तर

7

पहली बार जब आप चर मुद्रित करते हैं, तो आपने इसे char * के रूप में मुद्रित किया है, फ़ाइल को टेक्स्ट फ़ाइल के रूप में प्रिंट करने का प्रिंटिंग (और आप भाग्यशाली हैं कि आप क्रैश नहीं हुए)। दूसरी बार जब आपने इसे मुद्रित किया, तो आपने इसे int के रूप में दोबारा परिभाषित किया, जिससे प्रतिनिधित्व पूरी तरह अलग हो गया।

जब भी आप एक अन्य प्रकार आप आमतौर पर अपरिभाषित व्यवहार लागू कर रहे हैं करने के लिए एक प्रकार से संकेत दिए गए डाली। चूंकि char के पास int से कोई मानक संबंध नहीं है, तो आपके पास यह है।

संपादित करें: अपनी टिप्पणी सवाल का जवाब करने के लिए:

#include <sstream> 

void foo(std::stream &str) { 
str << "42\n"; 
}; 

int main() { 
int aNumber; 
std::stringstream aStringStream; 
foo(aStringStream); //Pass our stream to the function. It contains 
    //"42\n" when the function returns. 
aStringStream >> aNumber; //aNumber == 42 
aNumber += 10; //aNumber == 52; 
std::cout << aNumber; //Print "52" 
} 
+0

धन्यवाद। एक fstream पास करने और समारोह से पढ़ने के मूल्य प्राप्त करने पर कोई सलाह (वापसी बयान के बिना?)? – physicsmichael

+0

@ vgm64: ज़रूर। संपादन देखें। –

+0

@ बिल ओनल: मैंने अभी अपनी तकनीक के साथ अपना कोड विस्तारित करने का प्रयास जोड़ा है। यह काम करता हैं। इसके बारे में तुम क्या सोचते हो? – physicsmichael

2

आपको कम से कम दो समस्याओं यहाँ है।

  1. आप alt_reader में एक स्ट्रिंग बफर गुजर जाना चाहिए, बजाय आप किसी पूर्णांक गुजर रहे हैं:

    मुख्य()

  2. आप मूल्य 123 के लिए स्ट्रिंग '123' पढ़ा लेकिन किसी पूर्णांक चाहते करना चाहते करने लगते हैं।

आप कर सकता है:

void alt_reader(ifstream &file, char* line){ 
    file.read(line, 3); 
    line[3]=0; 
    cout << "First Time: " << line << endl; 
} 

int main() { 
    ifstream inFile; 
    inFile.open("num.txt"); 

    char buffer[128]; 
    alt_reader(inFile, buffer); 

    int num=atoi(buffer); 
    cout << "Second Time: " << num << endl; 

    return 0; 
} 

ध्यान दें कि मैं alt_reader और atoi को line[3]=0; जोड़ दिया है स्ट्रिंग से रूपांतरण (एक scii) int करने के लिए करता है।

+0

@quamrana: यह मेरी स्थिति की स्थिति के लिए पूरी तरह से काम करेगा, लेकिन जिस नंबर को मैं पढ़ रहा हूं वह आवश्यक नहीं है, और नीचे स्ट्रिंग स्ट्रीम खुशी से एक int या डबल में जाना होगा। फिर भी, बहुत बहुत धन्यवाद। – physicsmichael

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