2014-11-01 130 views
-1

我的代碼有問題。這是一個小型的學校項目,我希望通過將控制檯窗口中的字符串重定向到「.txt」文件來加強它。我的問題是,我只得到最後一個字符串printet。所以我的猜測是我一直覆蓋CoolNumber.txt文件,但是我看不到改變的地方,所以我不覆蓋,只是添加到文件中。將cout重定向到文件C++

我的代碼如下所示:

#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上查看其他主題,但似乎找不到任何對我更好的方法。

+1

反正我沒有得到你想要達到的目標。你不能只輸出到文件流? – 2014-11-01 11:51:43

+1

在每次遞歸調用中,您都打開文件進行寫入,清除它。 – 2014-11-01 11:59:47

回答

1

你可以試試這個是附加到文件

file.open(「CoolNumber.txt」的std :: ofstream的應用::)

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

或者你也許可以從你的函數中返回一個字符串向量並打印它們 - 遵循「做一件事,做得很好」的原則 - 你當前的函數將計算和輸出混合在一起,這本質上是做兩件事情。