2017-04-08 7 views
0
私は、テキストファイルを選択して、私はバックスペースキーを押すと、私は、ドキュメントをチェックして、私はテキストドキュメントをチェックインするとき、私はそうのようなランダムな文字列を取得するたびに
int main(){ 
std::cout << "Insert file name/or path. \n NOTE: ONLY INPUTS. DELETES PREVIOUS DATA.\nV.6" << std::endl; 
std::string filen; 
std::cin >> filen; 
std::ofstream myFile; 
try{ 
myFile.open(filen, std::ios::out); 
} 
catch(std::fstream::failure){ 
std::cout << "Could not open file!\n Make sure the name and data type are valid."; 
system("pause"); 
} 
while(true){ 
    int press = getch(); 
    if(press == 43) myFile.close(); 
    if(press == 8){myFile << "\b" << " " << "\b";std::cout << "\b" << " " << "\b" << std::flush;} 
    if(press == 13){ myFile << "\n"; std::cout << "\n" << std::flush;} 
    if(press != 43 && press != 127 && press != 13 && press != 8){myFile << (char)press;std::cout << (char)press;} 
     } 
return 0; 
} 

は、ファイル内のバックスペースを書く

Random Characters

+1

トピックをオフにする:ストリームの例外を有効にする必要があります。デフォルトでは、ストリームはスローされません。通常、入力エラーがあまりにも一般的で例外的とみなされることがないため、より良い結果が得られます。ストリーム操作で成功したかどうかは、ストリームがエラーを報告した場合、 'if(!myFile)'が 'if'の本文に入るオブジェクトをテストすることでテストできます。とにかく例外が欲しいと思ったら、これを読んでください:http://en.cppreference.com/w/cpp/io/basic_ios/exceptions – user4581301

答えて

2

@BoundaryImpositionがすでに指摘しているように、"\b"をファイルに書き込むと、バイナリのバックスペース文字が実際にファイルに書き込まれます。その代わりにあなたが望むのはmyFile.seekp(-1, std::ios_base::cur);です。 win/dosマシンの場合は、'\n'文字で余分な注意が必要です(テキストストリームに書き込まれると、0x0d 0x0aに変換されるため、1の代わりに2つの位置を検索する必要があります)。

しかし、一般的に、あなたは非常に巨大なファイルを扱うされていない場合、(必要に応じて文字を削除するには、pop_backまたはeraseを使用して)ちょうどstd::stringにコンテンツを保存するための方法が容易になり、ときにファイルに書き込みます終了しました。

4

これらは「ランダムな文字」ではありません。それらはバックスペース文字です!入力したとおりに入力します。

これは、16進エディタ(またはプログラムの出力をhexdumpなどでパイプすること)で確認できます。

共通シェルの動作を複製する場合は、バックスペース文字を識別するための独自のコードを作成し、myFileに追加する代わりに、以前に入力した文字を削除する必要があります。

+0

そしてこのプログラムは間違いなくCです! –

+0

どうしたらうまくいくのですか?私はI/Oをファイルするためのノブです。以前言われたことは、端末がファイルとは異なる文字を受け取ったからです。 – TheScripterGeek

+0

@TheScripterGeek多くのシステムでは、端末はファイルです。 – user4581301

関連する問題