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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

Q&A

解決済

3回答

250閲覧

【C、C++】ファイルの文字列の扱い方について

torimingo

総合スコア122

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

0グッド

0クリップ

投稿2019/04/03 01:00

CやC++で、ファイルの文字列を読み込んで、メモリに格納したいと思っています。
ファイルは以下のようなものです。

##### #P # #EEE# #####

上記のファイルデータは、コンソールをUIとしたゲーム用のデータです。
メモリに格納したあと、whileループでコンソールに出力し続けたいと思っています。

このとき、CやC++では、どのようなデータ構造を用いるのが一番いいですか?
いまのところ、二次元配列を使おうと思っています。

追加で質問なのですが、EOF(-1)というのは、ファイル(ハードディスク)に書かれているのでしょうか?
CやC++の関数は、EOFを配列に格納せずに捨てちゃいますよね?
改行文字はファイル(ハードディスク)に書かれていると思うのですが、CやC++は、改行文字も捨ててしまいますか?

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

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

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

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

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

guest

回答3

0

ベストアンサー

例示の文字列通り、4行の文字列で格納してはどうでしょう

・EOFは、ファイルの終端に達し、戻すべき文字がなくなった場合に出力するもんで、ファイルに格納されてるわけではないです
・改行はファイルに保存されてます。それを捨てるかどうかはあなたのご自由で。

投稿2019/04/03 01:07

y_waiwai

総合スコア87719

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

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

torimingo

2019/04/03 01:18

ご回答をありがとうございました。 string型の配列(要素数4)ということでしょうか? CやC++は、メモリにEOF(-1)を書かないということでしょうか? あくまで関数の戻り値としてのみEOF(-1)が使われるということですか?
y_waiwai

2019/04/03 01:37

> string型の配列(要素数4)ということでしょうか? そんでいいんじゃないでしょうか。 いろいろやり方はあります。あなたのごじゆうに。 > CやC++は、メモリにEOF(-1)を書かないということでしょうか? そうです。ファイルの終端という目印として関数から戻されるだけです。 まあ、読み込み終了という目印のために、変数や配列に格納しとくという使い方もありかもしれません
torimingo

2019/04/03 01:43

EOFの扱われ方がよくわかりました。 今まで、メモリに書かれていると思い込んでいました。
guest

0

EOF(End of File)は確かに捨てるのが無難です。

改行文字も捨ててしまいますか?

使いかたに寄ります。基本は多言語と同じように捨ててしまうのが最良の選択です。

後一つ、ゲーム製作者側から意見ですが、そんなデータを実際に使うなんて滅多にない。
どこかのサイトに落ちてたソースコードの質問バレバレです。課題なら自分でやってこそですよ。

投稿2019/04/03 01:06

stdio

総合スコア3307

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

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

torimingo

2019/04/03 01:19

ご回答をありがとうございます。 EOF(-1)を捨てるのが無難ということは、EOF(-1)はハードディスクに格納されているということでしょうか?
stdio

2019/04/03 01:34

ハードディスク? EOFってデータにあったかしら? 試しに、TeraPadで「あ」とだけをSHIFT-JISで保存したあと、バイトで読み込む別のエディタで開いてみたけど「EOF」の様な特定のバイトは無かったよ。 ETX「end of text」とかいうものなら、確かに下記を見る限りあるけど実際にソース書いて文字を読みたいだけなら大して気にすることでもないと思いますよ。 http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html
torimingo

2019/04/03 01:40

EOF(-1)は、ハードディスクには、格納されていないということですね。 ASCIIコードの場合は、ファイルの終端に3を書いてそうな感じですかね。
guest

0

改行文字を含む 文字列 で保持しておけば良いとおもいます。
char * s = "#####\n#P #\n#EEE#\n#####\n"

print(s) で表示できます。(whike をつかう必要は無い)

EOF は c でファイルからデータを読み込む際に それ以上データがないことを判定するために使われる値です。
ファイル に EOF の値が実施に書かれているわけではありません。
(ファイルに EOF の値がかかれているとしたら、本当のデータ値なのかファイルの終わりマークなのかの区別をつけることができなくなる...)

投稿2019/04/04 20:53

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問