मैं आउटपुट फ़ाइल में वर्ण लिखने के लिए '<<' ऑपरेटर और 'पुट ()' फ़ंक्शन के बीच अंतर को समझने की कोशिश कर रहा हूं।

मेरा कोड:

#include <fstream>
using namespace std;

int main() {
    ofstream out ("output.txt");

    int x = 1;

    // This produces the incorrect result ...
    out.put(x);
    
    // ... while this produces the correct result
    out << x;


    // These two produce the same (correct) result
    out.put('a');
    out << 'a';
    
    out.close;
}

मुझे लगता है कि out.put(x) पूर्णांक 1 को ASCII कोड के अनुसार एक वर्ण में परिवर्तित करता है, लेकिन मुझे समझ में नहीं आता कि जब मैं out << x का उपयोग करता हूं तो ऐसा क्यों नहीं होता है।

हालांकि, out.put('a') करता है out << 'a' जैसा ही है।

ऐसा क्यों है?

1
W. van der Goot 1 अक्टूबर 2020, 16:53

2 जवाब

सबसे बढ़िया उत्तर
int x = 1;

// This produces the incorrect result ...
out.put(x);

नहीं, यह int को char में कनवर्ट करता है और एक char को 1 मान के साथ आउटपुट करता है।

// ... while this produces the correct result
out << x;

यह स्वरूपित आउटपुट करता है और x मान के प्रतिनिधित्व को आउटपुट करता है। संभवतः यह वर्ण 1 दिखाएगा जो कि 1 के मान वाले वर्ण से भिन्न है।

// These two produce the same (correct) result
out.put('a');
out << 'a';

हां, वहां कोई रूपांतरण नहीं है। क्या आपने किया था

int x = 'A';
out.put(x);
out << x;

आप शायद A65 देखेंगे जहां A put(x) से आता है और 65 स्वरूपित आउटपुट से 65 अक्सर 'A' का मान होता है .

1
Ted Lyngmo 1 अक्टूबर 2020, 17:14

जब आप out << 1 का उपयोग करते हैं, तो आप कॉल करते हैं: operator<<(int val) और नहीं: operator<<(char val), तो वह int को std::string पर कास्ट कर सकता है।

1
DipStax 1 अक्टूबर 2020, 17:03