質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

2412閲覧

c++で入力されたファイルが元のコードがコメントアウトされると消えてしまう

reotantan

総合スコア295

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/11/06 08:21

編集2015/11/06 09:13

最初にかいたコードをコメントアウトしてこのコードを同じファイルで実行しようとしたんですが、ファイルの中身は消えてしまいました。

// //ifstream thisfile("Player.txt"); // // int id; // string name; // double money; // // while(thisfile>>id>>name>>money){ // cout<<id<<", "<<name<<", "<<money<<endl; // }

このようなコードを書き、記入されたファイルの情報をスクリーンに取り出そうとして、このコードの中身をコメントにしたら、ファイルは白紙の状態になってしまいました。
エクリプスを使っているのですが、コメントアウトしてからファイルから文字を取り出すコードを書いた後、ファイルの中身が変わりましたが変更してもいいですかと聞かれました。
このときにデータが消えたんだろうなとは予想できるのですが、一度保存したデータを元のコードが消えることで
消されてしまうのは困ります。
何か対策はないのでしょうか?

コード /* * main.cpp * * Created on: 2015/11/06 * */ #include<iostream> #include<fstream> using namespace std; int main(){ ofstream thefile("Player.txt"); cout<<"Enters players ID,Name and Money"<<endl; cout<<"press ctrl+z to quit\n"<<endl; int idnumber; string name; double money; while(cin>>idnumber>>name>>money){ thefile<<idnumber<<' '<<name<<' '<<money<<endl; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2015/11/06 08:35

コードを書き換えたのであれば、書き換え後のコードをどう書いたかも追記していただけないでしょうか(そちらにバグがあることも考えられますし)。
guest

回答3

0

ベストアンサー

ちょろっとやってみましたが、ちゃんと動作しているようですよ。

下のソースをコンパイルして走らせ、下記を入力すると

123 abc 567 Enter
Ctrl+Z

Player.txtというファイルができ、中身は下記でした。

123 abc 567

そして、その中身を上のソースに入れ替えてコメントを外して走らせると、下記のように表示されました。

123, abc, 567

恐らく、これはreotantanさんの意図通りではないでしょうか?

であれば、最初のソースをコンパイル後、本当に実行されたでしょうか?
eclipseの操作ミスで実行していない可能性があるように思います。
もう一度やってみるのがよさそうに思います。
それでもうまく行かないならeclipse操作の問題ですので、どのような操作をしたのか提示されるのが良いと思います。


cateyeさん。
Ctrl-ZはEOFの意味もあるそうです。

投稿2015/11/06 12:25

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2015/11/06 13:01

>Ctrl-ZはEOFの意味もあるそうです。 有難う御座いますmm
reotantan

2015/11/07 19:33

回答ありがとうございました。
guest

0

半分憶測ですが・・・
1.下のソースをコンパイルして実行しファイルを作った。
2.したのソースをコメントアウトして、上のソースを書きコンパイルした。
(この時、中身が変わった~~といわれた)
3.実行しようとしたらファイルの中身が消えていた。
・・・で、間違いありませんか?

1の段階で作成されたファイルは確認しましたか?
Ctl-Zで抜けるのは何故でしょう?
(うろ覚えですが、windowsだとCtl-Zは元に戻す働きをすると思いましたが?)

投稿2015/11/06 10:46

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reotantan

2015/11/06 20:04

はい間違いありません、ファイルは確認しました。コード自体に問題がないのはわかっているのですが、 コメントアウトして新たなコードを書いたときに白紙になってしまうのは、困るなと思い投稿しました
guest

0

ofstream thefile("Player.txt");
これは上書きなので
ofstream thefile("Player.txt",std::ios::app);
で追記にしましょう。
ググるとこの辺の情報はいっぱい出てくるので確認してみてください。

投稿2015/11/06 10:32

STL

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reotantan

2015/11/07 19:33

そうですね、上書きが悪さをしていると思います。 ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問