我的代码有问题。这是一个小型的学校项目,我希望通过将控制台窗口中的字符串重定向到" .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上查看其他主题,但似乎无法找到对我有用的任何主题。
答案 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;的原则打印它们。 - 您当前的函数混合了计算和输出,这实际上是做两件事。