C++またはCで

[戻る]
MEGU 2004/10/25(月) 19:20:39
C++またはCで
あるテキストに書いてある文を読み込んでそれを構造体として扱うにはどのようなプロ
グラムを書いたらよいか分からないので教えていただけませんか?
例  テキストファイルの内容
3 <−ここの数だけループを繰り返して下の言葉を読み込む
サクラ  <−この言葉を一つ一つを構造体として扱うにはどうすればよいのか
花火
水ようかん
例   出来たらいい構造体の中身
data[100]
data[1] = サクラ
data[2] = 花火
data[3] = 水ようかん
こんな感じですけど出来るでしょうか?構造体でなくても管理番号があればいいんです
けど。
よろしくお願いします。

シャノン 2004/10/25(月) 19:39:07
あなたが書いたとおりのことをすればよいです。

1.ファイルを開きます。
2.一行読み、それを数値として、その数だけの要素を持つ配列を確保します。
3.読んだ数字の行数だけファイルから読み込み、2 で用意した配列に格納します。

ちなみに、構造体ではありません。配列です。

どういうコードを書いたらいいか教えてくれ、という質問は嫌われます。
コードは自分で書きましょう。ヒントをいくつか提示しておきます。

ファイルを開く / ファイルから一行読む / ファイルを閉じる
fopen 関数、fgets 関数、fclose 関数 など

文字を数値に変換する
itoa 関数 など

配列を動的に確保するのは後でいいです。
とりあえずは最大値を決めて固定長配列でできるようになりましょう。
あなたが書いたように data[100] とか。

それができたら、次はメモリの動的確保です。
malloc 関数、free 関数など

MEGU 2004/10/25(月) 20:01:47
ありがとうございます。
できればもう少し詳しく教えていただけませんか?
その説明だと良く分からないでもう少し教えていただけませんか?

dairygoods 2004/10/25(月) 20:12:09
「もう少し」とか「良く分からない」といった曖昧な表現を用いず、
どれが理解でき、どれが理解できないのか、
現状でどこまでできているのかなど、具体的に明確に質問しましょう。

また、「使用上の注意」を読み、開発環境を記載しましょう。

# 「良く分からないのでもう少し詳しく質問してください」
# なんて言われたら困りませんか?

シャノン 2004/10/25(月) 20:22:34
間違いがありました。
> 文字を数値に変換する
> itoa 関数 など
itoa ではなく atoi でした。

で、大雑把に流れを示すと、こんな感じでしょうか。

ファイルハンドル = ファイルを開く(ファイル名);

char 行数を格納する変数[ 適当なサイズ ];
ファイルから一行読む(行数を格納する変数, ファイルハンドル);

int 読み込む行数 = 文字から数値に変換(行数を格納する変数);

char データを格納する変数[ 適当な数 ][ 適当な長さ ];

[ 読み込む行数 ]回、以下を繰り返す
繰り返しここから
 ファイルから一行読む(
  データを格納する変数[ 何回目の繰り返しか ], ファイルハンドル);
繰り返しここまで

// 読み込んだデータをどうするかはあなたのご自由に

ファイルを閉じる(ファイルハンドル);

MEGU 2004/10/25(月) 20:37:39
一生懸命やっているのですけどどうにも一行読み込みが出来てないみたいで
Visual Studio .NET 2003でやってるのですけど
ステップトレース見ながらやってるのですけどどうにも読めないんです。
言われた事を理解しながらやってるつもりなんですけどね…

瀬戸っぷ [E-Mail] 2004/10/25(月) 22:07:35
> ステップトレース見ながらやってるのですけどどうにも読めないんです。
> 言われた事を理解しながらやってるつもりなんですけどね…

でしたら……
・どういうコードを書いているか。
・どんな内容のファイルを読ませようとしているか。
・どのような結果を望んで、現在どうなっているか。
の3点を掲示して下さい。

メイ 2004/10/26(火) 00:53:26
>Visual Studio .NET 2003でやってるのですけど

[MFC]?
それとも[SDK]?

[MFC]なら[CFile][CStdioFile]辺りを調べてみると楽かも。

επιστημη 2004/10/26(火) 07:29:04
こんなんでいいのかしら?

#include <iostream>
#include <sstream>
#include <string>

int main() {

  // 入力データ
  std::string input = "3\n" "サクラ\n" "花火\n" "水 ようかん\n";
  std::istringstream stream(input);

  // 格納領域
  std::string data[100];
  int count;

  // データ数を読む
  stream >> count;
  stream.ignore(1); // 改行を無視
  // データをcount個読む
  for ( int i = 0; i < count; ++i ) {
    getline(stream, data[i]);
  }

  // 確認
  for ( int i = 0; i < count; ++i ) {
    std::cout << "data[" << i << "]=" << data[i] << std::endl;
  }

  return 0;
}

MEGU 2004/10/27(水) 07:37:57
[[解決]]
ありがとうございました
とりあいず出来ましたのでどうもみなさんにご迷惑おかけしました。

古いスレッドには追加発言できません。