উত্তর:
আপনি যা করতে চান তার একটি কার্যকারী উদাহরণ এখানে। কোডের প্রতিটি লাইন কী করে তা জানতে মন্তব্যগুলি পড়ুন। আমি এটি আমার পিসিতে জিসিসি 4.6.1 দিয়ে পরীক্ষা করেছি; এটা ঠিক কাজ করে।
#include <iostream>
#include <fstream>
#include <string>
void f()
{
std::string line;
while(std::getline(std::cin, line)) //input from the file in.txt
{
std::cout << line << "\n"; //output to the file out.txt
}
}
int main()
{
std::ifstream in("in.txt");
std::streambuf *cinbuf = std::cin.rdbuf(); //save old buf
std::cin.rdbuf(in.rdbuf()); //redirect std::cin to in.txt!
std::ofstream out("out.txt");
std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
std::string word;
std::cin >> word; //input from the file in.txt
std::cout << word << " "; //output to the file out.txt
f(); //call function
std::cin.rdbuf(cinbuf); //reset to standard input again
std::cout.rdbuf(coutbuf); //reset to standard output again
std::cin >> word; //input from the standard input
std::cout << word; //output to the standard input
}
আপনি কেবল একটি লাইনে সংরক্ষণ এবং পুনঃনির্দেশ করতে পারেন:
auto cinbuf = std::cin.rdbuf(in.rdbuf()); //save and redirect
এখানে বাফার std::cin.rdbuf(in.rdbuf())সেট std::cin'sকরে in.rdbuf()এবং তার সাথে যুক্ত পুরানো বাফারটি ফিরিয়ে দেয় std::cin। খুব একই জিনিসটি করা যেতে পারে std::cout- বা for বিষয়টির জন্য কোনও স্ট্রিম ।
আশা করি এইটি কাজ করবে.
inএবং outথেকে ও লিখতে পড়তে, in.txtএবং out.txtযথাক্রমে। এছাড়াও, ফাইল স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে inএবং outপরিধি বাইরে যেতে।
freopenকারণ আমি stdoutযদি ব্যবহার করি তবে আর ফিরে আসতে পারব না freopen। stackoverflow.com/questions/26699524/...
শুধু লেখো
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
freopen("output.txt","w",stdout);
cout<<"write in file";
return 0;
}
stdout, না cout।
std::sync_with_studio(false);, যদিও ডিফল্টরূপে এটি সেট করা আছে true।
ofstream out("out.txt"); cout.rdbuf(out.rdbuf());- কেবল একটি অতিরিক্ত লাইন, এবং এটি বহনযোগ্য। খুব বেশি সহজ নয় :)
প্রোগ্রামিং প্রতিযোগিতার জন্য সিড / সিউড ছায়ার জন্য এখানে একটি ছোট কোড স্নিপেট রয়েছে:
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream cin("input.txt");
ofstream cout("output.txt");
int a, b;
cin >> a >> b;
cout << a + b << endl;
}
এটি অতিরিক্ত সুবিধা দেয় যে সমতল স্ট্রিম স্ট্রিমগুলি সিঙ্ক করা স্টডিও স্ট্রিমগুলির চেয়ে দ্রুত। তবে এটি কেবল একক ফাংশনের সুযোগের জন্য কাজ করে।
গ্লোবাল সিন / cout পুনর্নির্দেশ হিসাবে লেখা যেতে পারে:
#include <bits/stdc++.h>
using namespace std;
void func() {
int a, b;
std::cin >> a >> b;
std::cout << a + b << endl;
}
int main() {
ifstream cin("input.txt");
ofstream cout("output.txt");
// optional performance optimizations
ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cin.rdbuf(cin.rdbuf());
std::cout.rdbuf(cout.rdbuf());
func();
}
লক্ষ্য করুন ios_base::sync_with_stdioএছাড়াও রিসেট std::cin.rdbuf। সুতরাং আদেশ গুরুত্বপূর্ণ।
Ios_base এর তাত্পর্যটিও দেখুন: সিঙ্ক_ইথ_স্টডিও (মিথ্যা); cin.tie (নাল);
স্ট্যান্ডার্ড আইও স্ট্রিমগুলি সহজেই একক ফাইলের সুযোগের জন্য ছায়া গোছানো যায়, যা প্রতিযোগিতামূলক প্রোগ্রামিংয়ের জন্য দরকারী:
#include <bits/stdc++.h>
using std::endl;
std::ifstream cin("input.txt");
std::ofstream cout("output.txt");
int a, b;
void read() {
cin >> a >> b;
}
void write() {
cout << a + b << endl;
}
int main() {
read();
write();
}
তবে stdএক্ষেত্রে আমাদের একের পর এক ঘোষণাপত্র বাছাই করতে হবে এবং এড়িয়ে যাওয়ার using namespace std;কারণ এটি অস্পষ্টতার ত্রুটি দেয়:
error: reference to 'cin' is ambiguous
cin >> a >> b;
^
note: candidates are:
std::ifstream cin
ifstream cin("input.txt");
^
In file test.cpp
std::istream std::cin
extern istream cin; /// Linked to standard input
^
আরও দেখুন কীভাবে আপনি সি ++ তে নেমস্পেসগুলি সঠিকভাবে ব্যবহার করবেন? , "নেমস্পেস স্টাডি ব্যবহার" খারাপ অভ্যাস হিসাবে বিবেচিত হয় কেন? এবং একটি সি ++ নামস্থান এবং একটি বৈশ্বিক ফাংশনের মধ্যে নামের সংঘর্ষকে কীভাবে সমাধান করবেন?
আপনার কম্পাইলগুলি প্রগের নাম ধরে নেওয়া x.exe এবং the সিস্টেম শেল বা প্রম্পট
$ x <infile >outfile
ইনফিল থেকে ইনপুট নেবে এবং আউটপুট আউটপুট হবে।
Cout ফাইল থেকে পুনর্নির্দেশের জন্য এটি চেষ্টা করুন Try
#include <iostream>
#include <fstream>
int main()
{
/** backup cout buffer and redirect to out.txt **/
std::ofstream out("out.txt");
auto *coutbuf = std::cout.rdbuf();
std::cout.rdbuf(out.rdbuf());
std::cout << "This will be redirected to file out.txt" << std::endl;
/** reset cout buffer **/
std::cout.rdbuf(coutbuf);
std::cout << "This will be printed on console" << std::endl;
return 0;
}
পুরো নিবন্ধটি পড়ুন স্টিন :: আরডিবিফ ব্যবহার করুন সিন এবং কাউট পুনর্নির্দেশের জন্য