OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ifstreamの使い方

  • すぐに回答を!
  • 質問No.247309
  • 閲覧数474
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 27% (30/110)

Txtファイルからデータを読んでコンソールにそのデータを表示する簡単なプログラムを作っているのですが、21行中14行目でおそらくEOFになってプログラムが終了してしまいます。どうやったら全部の行を読めるようになるのか、教えてください。お願いします。

int main() {
//データを表示するための関数
void outputline(char*, int, int, char*);

int i = 0;
 char FlNo[8], FlType[5];
int Hr, Min;
ifstream inFile (conFilePath, ios::in);
while (inFile >> FlNo >> Hr >> Min >> FlType) {
outputline(FlNo, Hr, Min, FlType);
}
return 0;
}

以下はconFilePathに書かれているデータの内容です。

TG24 06 00 A747
UA345 06 05 A747
KL903 06 10 A747
CX600 06 15 A747
QF34 06 20 A767
QF100 06 25 A767
QF302 06 30 A747
JL98 06 35 A747
QF92 06 40 A767
PX03 06 45 A777
EM786 07 00 A777
SQ165 07 20 A747
QF98 07 30 A767
BA56 08 00 A747
QF97 09 30 D767
PX08 09 45 D777
QF303 09 50 A747
TG25 10 20 D747
QF6 10 45 D747
BA57 10 50 D747
SQ166 10 55 D747
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

> setbaseを使うためにはiomanip.hを宣言すれば良いんですよね?

そうです。

> ifstream inFile (.....);
> inFile >> setbase(10);
> ということでしょうか?

そうです、こっちです。

読込む度に入れるとしたら dec というマニピュレータを使います。
こんな感じ。

  while (inFile >> FlNo >> dec >> Hr >> dec >> Min >> FlType) {


ん、「同じエラーが」と書いたのは、コンパイルエラーのことですか?

STL は、Standard と名前がついていても、実装の種類がたくさんあります。
そのあたりの差かもしれません。

手元にある VC4.2 の iostream を見ると、setbase マニピュレータがありません。
dec マニピュレータはあるので、そちらを使ってみてください。

VC4.2 では dec マニピュレータは ios.h で宣言されているので、iomanip.h は
include しなくても良いです。手もとの環境を確かめて見てください。
お礼コメント
northcurlcurl

お礼率 27% (30/110)

VC++6.0を使っています。decを使って書いたところ、うまくプログラムが動きました。ありがとうございました。

PS. setbase()がなぜ動かなかったかは未だに不明です…
投稿日時 - 2002-04-06 06:08:11
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

> BA56 08 00 A747 この行を読もうとするときに 08 でエラーになります。 数値の定数表現を思い出してください。頭に 0x をつけると 16進数、頭に 0 をつけると 8進数表記になります。 istream は、特に指定が無ければ、この表記に基づいて整数の解釈をします。 これを明示的に 10進数だ、とするには setbase() マニピュレータを使います。 コン ...続きを読む
> BA56 08 00 A747

この行を読もうとするときに 08 でエラーになります。

数値の定数表現を思い出してください。頭に 0x をつけると 16進数、頭に 0 をつけると 8進数表記になります。
istream は、特に指定が無ければ、この表記に基づいて整数の解釈をします。

これを明示的に 10進数だ、とするには setbase() マニピュレータを使います。
コンストラクタの直後に

  inFile >> setbase(10);

という行を追加してください。
お礼コメント
northcurlcurl

お礼率 27% (30/110)

早速の回答、ありがとうございます。setbaseを使うためにはiomanip.hを宣言すれば良いんですよね?すごく恥ずかしい質問なのですが、setbaseのところでundeclarerd identifierと、エラーが出るのです。setbaseはコンストラクタの直後に、とa-kumaさんは書かれていますが、それは
ifstream inFile (.....);
inFile >> setbase(10);
ということでしょうか?それともwhileループの条件文で
inFile >> FlNo >> setbase(10) >> Hr >> setbase(10) >> Min >> FlType
とするのでしょうか?どちらにしても、同じエラーが出てしまったのです。何が原因なのでしょうか?
投稿日時 - 2002-04-05 12:08:48


このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ