あなたが入力と出力のためのC++とCの古い施設を混合している:
はあなたが私は?、これを解決するために助けることができるここでは、コードです。 C++に固執すれば、はるかに簡単な時間を取ることができます。
まずは、C++と同等であなたの構造体を置き換えてみましょう:今すぐ
struct sample {
int code;
std::string name;
};
name
は、必要な数の文字を保持することができます。
我々は今、関数を記述しますこれが出力されますC++出力ストリームにsample
:
std::ostream& write_sample(std::ostream& os, const sample& samp)
{
os << samp.code << "\n" << samp.name;
return os;
}
この意志の出力名を続けコード、それらの間で改行を持ちます。今
のは、構造体を埋めるためにC++の機能を使用するようにmain()
ルーチンを変更してみましょう:右であるstd::cout
とのwrite_sample()
機能を使用することによって、我々はすぐに我々が物事を持っているかどうかを確認することができ、今
int main()
{
sample samp;
cout << "ENTER CODE :\n";
cin >> samp.code;
cost << "ENTER NAME :\n";
cin >> samp.name;
}
を出力ストリームのタイプ:
write_sample(std::cout, samp);
これは、コンソールに入力した内容を繰り返す必要があります。
write_sample(outfile, samp);
:我々は再び、この新しいストリームで私たちのwrite_sample()
機能を使用することができ、今
std::ofstream outfile{"Hellothere.txt"};
:
ではなく、ファイルに書き込むには、我々はファイルストリームを開くには、C++の機能を使用することができますプログラムが実行されると、Hellothere.txtに入力したテキストが含まれているはずです。
最終(少し、より高度な)タッチとして、あなたは標準<<
ストリーミングスタイルを使用できるようになる、operator<<
にごwrite_sample()
機能の名前を変更する場合があります
outfile << samp;
一緒にすべてを入れて、最終的なコードは次のようになります:
#include <fstream>
#include <iostream>
#include <string>
struct sample {
int code;
std::string name;
};
std::ostream& operator<<(std::ostream& os, const sample& samp)
{
return os << samp.code << "\n" << samp.name;
}
int main()
{
using namespace std;
sample samp;
cout << "Enter code:\n";
cin >> samp.code;
cout << "Enter name:\n";
cin >> samp.name;
std::ofstream outfile{"Hellothere.txt"};
outfile << samp;
}
'fflush(stdin);' - それをしないでください。それは決して標準的ではありません。 'gets(sampl.name);'これをやってはいけません、 'gets'はあまりにも恐ろしいので、標準ライブラリから削除されました。あなたが設定していない 'name'のバイトとメモリ内の' int'の実装表現を含む、 'sample'オブジェクトの*全体の内容をあなたのファイルに書いていることを理解してください。あなたのコードは*フォーマットされた出力*を実行しません。だから、それから出てくるものはまさにあなたがしたことです。 'sample'のメモリ表現をディスクファイルにダンプします。 – WhozCraig
私はあなたの答えを何度も読んだが、私はそれを100%で得ることはできなかったが、私はあなたを理解しているが、どうすればこの問題を解決できるだろうか? '' int code'を 'char code'私を修正してください。 –
あなたは自分のコードを編集することができますか、それを解決するために何を書くべきか教えてください。 –