将cout重定向到文件c ++

时间:2014-11-01 11:43:10

标签: c++ redirect cout

我的代码有问题。这是一个小型的学校项目,我希望通过将控制台窗口中的字符串重定向到" .txt"文件。我的问题是我只得到最后一个字符串printet。所以我的猜测是我一直覆盖CoolNumber.txt文件,但我看不到在哪里进行更改,所以我不会覆盖,只是添加到文件中。

我的代码如下所示:

#include <iostream>
#include <string.h>
#include <sstream>
#include <fstream>

using namespace std;

string intToChar[10] = { 
    "0",
    "1",
    "2abc",
    "3def",
    "4ghi",
    "5jkl",
    "6mno",
    "7pqrs",
    "8tuv",
    "9wxyz"
    };

void CoolNumber(string number, string character)
{
    ofstream file;
    file.open("CoolNumber.txt");
    streambuf* sbuf = cout.rdbuf();
    cout.rdbuf(file.rdbuf());

    if (number == "")
    {
        cout << character << ", " << endl;
    }
    else
    {
        int length = intToChar[number[0]-'0'].size();
        for (int i = 0; i < length; i++)
        {
            stringstream ss; 
            char c = intToChar[number[0]-'0'][i];
            string s;
            ss << c;
            ss >> s; 
            CoolNumber(number.substr(1, number.size()), character + s);
        }
    }
}

int main()
{
    string number = "27529250";

    cout << "Type your mobilenumber: ";
    cin >> number;
    //int length = intToChar[5].length();
    //cout << length << endl;
    CoolNumber(number, "");
}

我知道我的代码可以通过cout工作到控制台窗口,如果没有这段代码就可以编写

    ofstream file;
    file.open("CoolNumber.txt");
    streambuf* sbuf = cout.rdbuf();
    cout.rdbuf(file.rdbuf());

让这段代码工作真是太棒了。

P.S。我曾尝试在StackOverflow上查看其他主题,但似乎无法找到对我有用的任何主题。

2 个答案:

答案 0 :(得分:2)

您可以尝试这是附加到文件的流版本

file.open(“CoolNumber.txt”,std :: ofstream :: app)

答案 1 :(得分:0)

重定向cout的整个概念是一个坏主意。例如,它意味着如果您在代码中调用其他函数,希望写入cout以进行调试,则会转到您的文件 - 这可能不是您想要的。

将您的功能配置文件更改为:

void CoolNumber(string number, string character, ostream& out = cout)

(添加out作为CoolNumber递归调用的参数,否则内部调用将使用cout作为输出,这可能不是你想要的那样)

然后使用out代替cout。然后添加:

ofstream file("CoolNumber.txt");

CoolNumber(number, "", file);

main

或者你也许可以从你的函数中返回一个字符串向量,并按照&#34;做一件事,做得好&#34;的原则打印它们。 - 您当前的函数混合了计算和输出,这实际上是做两件事。