2011-12-14 60 views
0

我工作在一個文本文件解碼器與一個編碼器,他們的工作關閉兩個不同的文本文件。解碼器在編碼的信息下打印解碼的信息,但它也打印了一堆其他信息。如何從編碼器解決這個C++文本解碼器解碼超過要求

#include <fstream> 
#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
    ifstream fin; // input file 
    string line; 
    ofstream fout; 

    //open output file 
    fout.open("secret.txt", ios::app); 
    if (!fout.good()) throw "I/O error"; 

    // open input file 
    fin.open("secret.txt"); 
    if (!fin.good()) throw "I/O error"; 

    // read input file, decode, display to console 
    while (fin.good()) { 
    getline(fin, line); 

    for (int i = 0; i < line.length(); i++) // for each char in the string... 
     line[i]--; // bump the ASCII code down by 1 

    fout << line << endl; // display on screen 
    } 

    // close file 
    fin.close(); 

    return 0; 
} 

文本文件中讀取

Uftujoh234

Ifmmp!NZ!obnf!JT!中共

Dmptfe!

Uftujoh

其解碼爲

是testing123

你好,我的名字是鮑勃

關閉

測試

這是所有多餘的東西,也打印在文本文件中

Sdrshmf012 
Gdkknlxm`ldhrana 
Bknrdc 
Sdrshmf 
Rcqrgle/01 
Fcjjmkwl_kcgq`m` 
Ajmqcb 
Rcqrgle 
Qbpqfkd./0 
Ebiiljvk^jbfp_l_ 
@ilpba 
Qbpqfkd 
Paopejc-./ 
Dahhkiuj]iaeo^k^ 
?hkoa` 
Paopejc 
O`nodib,-. 
C`ggjhti\h`dn]j] 
>gjn`_ 
O`nodib 
N_mncha+,- 
B_ffigsh[g_cm\i\ 
=fim_^ 
N_mncha 
M^lmbg`*+, 
A^eeh 

回答

1

看到額外的數據實際上是從"secret.txt"解碼數據有效輸出。

我不確定這是否是您想要的,但是您是否知道每次運行應用程序時都在讀取和寫入同一文件?

您會將越來越多的「已解碼」數據附加到文件中,因此您將獲得所指的額外輸出。


此外,有一個與你的while -loop的問題。直到一些錯誤位已被設置的fin

fin.good()將保持真實的,但它會進入一環的時間太多,因爲你要你的電話到getline (fin, ...)後立即檢查該流的狀態。

目前讀數會失敗,但您仍然會處理「未讀」數據。


std::getline將返回流對象,因爲std::istream(以及std::ostream)隱式可轉換爲布爾檢查它的當前狀態,你應該使用它作爲你的循環條件。

將您的循環改爲如下所示的內容,看看是否能解決您的問題。

while (getline (fin, line)) 
    { 
    for (int i = 0; i < line.length(); i++) // for each char in the string... 
     line[i]--; // bump the ASCII code down by 1 

    fout << line << endl; // display on screen 
    } 
+0

它仍然給我所有額外的數據 – David 2011-12-14 07:29:05

1

額外的東西不是額外的。您正在將數據寫入您正在閱讀相同的文件,所以你要做的就是:

  1. 寫行
  2. 讀線

您renencoding你已經編碼的數據。