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

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> 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 しなくても良いです。手もとの環境を確かめて見てください。
    • good
    • 0
この回答へのお礼

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

PS. setbase()がなぜ動かなかったかは未だに不明です…

お礼日時:2002/04/06 06:08

> BA56 08 00 A747



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

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

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

  inFile >> setbase(10);

という行を追加してください。
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。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

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q8進数から16進数への変換

8進数から16進数、また、16進数から8進数に
計算過程でほかの進数に変換することなく直接変換できますか?

Aベストアンサー

例:
8進の 324 を16進に。
32 と 4に分ける
32 を 2で割る → 15 あまり 0
あまり0なので、4はそのまま。
15を1 5 に分ける。
1を2で割る→ 0 あまり 1
あまり1なので、 5に+8する
0になったので終了。 答えは D4

等というように、ビットシフトと等価な計算はできます。
ただ、これを「他の進数に変換していない」と言っていいか微妙です。

それに、2進数にして区切りを変更する方が楽なのではないでしょうか。
324 → 011 010 100 → 0 1101 0100 → D4

Qint main の前のint add(int a,int b) ってなんですか?

int main の前のint add(int a,int b)
ってなんですか?

Aベストアンサー

関数のプロトタイプ宣言です。

賢いコンパイラだと後ろに書いてある実体を見て関数値や引数の型を読み取ってくれたりしますが、コンパイラによっては先に(つまりソースコードのより上の行に)型を宣言しておかないと正しく値の引き渡しができないものもあります。そういったトラブルを避けるために、add()という関数を使う箇所よりも上に、その返り値や引数の型を宣言しておくのです。

ちなみに、#include <stdio.h>というインクルードがありますが、このstdio.hファイルの中には、main()内で利用しているprintf()等の標準関数についてのプロトタイプ宣言なども書かれています。

Q2進数から16進数への変換、あるいはその逆について

はじめまして。
高校の情報の授業で「2進数・10進数・16進数」を勉強しています。
どうしても2進数から16進数への変換、あるいは、16進数から2進数への変換の方法がわかりません・・・

初心者でも分かりやすい解説をお願いします。

Aベストアンサー

2進数の各桁を、右から4桁毎に区切って、その4桁を右から1,2,4,8という具合に割り当てます。
その4桁を、16進数の1文字に対応させて、そのまま置き換えるだけです。
これを、2進数の4桁毎に、繰り返せば複数桁の16進数になります。

逆に、16進数を2進数にする場合は、16進数を1桁ずつに分解し、それぞれを2進数4桁に置き換えて、全体を繋げれば完成です。

2進数:16進数:中身
0000=0=0そのまま
0001=1=1そのまま
0010=2=2そのまま
0011=3=2+1
0100=4=4そのまま
0101=5=4+1
0110=6=4+2
0111=7=4+2+1
1000=8=8そのまま
1001=9=8+1
1010=10=8+2
1011=11=8+2+1
1100=12=8+4
1101=13=8+4+1
1110=14=8+4+2
1111=15=8+4+2+1

Qchar c = 'a'; char h[1] = c; エラー

char型のものを char[]型に代入したいです。

char c = 'a';
char h[1] = c;

として、

h[0] は \x97
h[1] は \x00

にしたいです。
型変換の方法を教えてください。

Aベストアンサー

とりあえず、確認を。

C では、'a'の表す値は 0x61 = 97 であって、 \x97 ではないと思います。
(\xnnn を、十六進数の意味に取りましたが、あってますでしょうか?
この場合、C では通常 0xnnn のように書くと思います。)
ので、 これは 0x61 のことをおっしゃっていると仮定します。

> char h[1] = c;
っと、これではたぶんコンパイルが通りません。

char h[1] = {c};

のように、配列であることを明示して代入してください。
この式では、前半でh という名前の、*長さ1 の* char の配列変数を確保します。
後半で、その中を初期化しています。
添え字は 0 からはじまるので、この場合、h[0] に c の内容が代入されます。
1個しか場所を確保していないので、 h[1] の位置のデータは内容が不定です。
文字列として h を扱いたいのであれば、 C の文字列には終端として 0 が必要ですから、
char c = 'a';
char h[2] = { c, '\0'};

のような書き方が必要になります。
これで、お望みのデータになると思います。

とりあえず、確認を。

C では、'a'の表す値は 0x61 = 97 であって、 \x97 ではないと思います。
(\xnnn を、十六進数の意味に取りましたが、あってますでしょうか?
この場合、C では通常 0xnnn のように書くと思います。)
ので、 これは 0x61 のことをおっしゃっていると仮定します。

> char h[1] = c;
っと、これではたぶんコンパイルが通りません。

char h[1] = {c};

のように、配列であることを明示して代入してください。
この式では、前半でh という名前の、*長さ1 の* char の配列変数...続きを読む

Q8桁文字列を16進数バイト配列に変換

お世話になります。
VB2005を使用しています。
温調器から温度データを引っ張るプログラムを作成しています。
8桁の文字列を16進数バイト配列に変換したいのですが、GetBytesでは10進数バイト配列に変換されてしまいます。
8桁の文字列又は10進数バイト配列を16進数バイト配列に変換する方法はないでしょうか?
文字列を1文字ずつ16進数に変換して配列に組み込んでいくしかないのでしょうか?
よろしくお願い致します。

Aベストアンサー

その温度計のメーカーには問い合わせしたのでしょうか
サンプルとかはないのですか

たとえば "GET" といった文字列を送りたい場合
どのように変換したものを送ればいいのかなど

"GET" を "474554"といった文字列に変換して送信なのか
『474554』といった文字列が必要なら

dim bld as new System.Text.StringBuilder
dim ss as string
for each _byte as Byte in AryByte
  bld.Append( String.Format( "{0:X2}", _byte ) )
next
ss = build.ToString
SerialPort1.Write( ss, 0, ss.length )
といった具合でよさそうですが

メーカのWebページなどにその機器の使い方のサンプルがあるなら
明示してみるといいかもしれませんよ

Qint *a = new int; エラー

下記をコンパイルすると、'int' 型は 'int *' 型に変換できない(関数 main() )
とエラーが出てしまいました。 何がおかしいのでしょうか ?
初歩的な間違いをしていると思いますが、アドバイスお願いします。

#include<iostream>
#include<stdlib>
#include<ctime>
using namespace std;

void main(void)
{
int *a = new int;
a=rand();
cout<<a<<endl;
delete a;

}

Aベストアンサー

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

int main(void)
{
srand ( time(NULL));
int *a = new int;
*a=rand();
cout<<*a<<endl;
delete a;
return 0;
}

/*
多分こうだと思う。
想像以上に乱数の精度が悪いような気がする。
*/

Q16進数を10進数に簡単に変換する関数は?

16進数を10進数に簡単に変換する関数は何かありますか?
もしご存知でしたら教えていただけないでしょうか?

例えば、3BDF8という16進数を10進数に変換したいと思っています。

Aベストアンサー

C言語のプログラム内では、保持している数値にn進数という概念はなく
文字列化するときに初めて考えるものです。

int n; // <- このnは何進数でもない

ご質問を以下のように解釈してサンプルを書いてみました。

例えば、3BDF8という16進数(の文字列)を10進数(の文字列)に変換したいと思っています。


$ cat test.c
#include <stdio.h>

int main(int argc, char *argv[])
{
int num;
sscanf(argv[1], "%x", &num);
printf("%d\n", num);
}

$ ./a.out 3BDF8
245240

いかがでしょうか。

Qvoid (*signal(int signum, void (*handler)(int)))(int);

の解釈を教えてください
最後の「(int)」については詳しくお願いします

Aベストアンサー

signalが

(1)1つ目の引数の型:int
(2)2つ目の引数の型:引数がintで戻り値がvoidである関数へのポインタ
(3)戻り値の型:引数がintで戻り値がvoidである関数へのポインタ(2と同じ)

を満たす関数である事を宣言しています。最後の(int)はsignalの戻り値の
関数ポインタがint型の引数を持つ事を示しています。

「引数がintで戻り値がvoidである関数へのポインタ」の型をHANDLERと表すと

HANDLER signal(int signum, HANDLER handler);

となります。

Q16進数を10進数に変換する方法...

お初にお目にかかります(^^)
簡潔に質問しますm(_ _)m

バージョン:MS-Visual Basic6.0
質問内容:
16進数を10進数に変換する方法がわかりません。
Hex(Text1.Text) や Oct(Text1.Text) のような方法で
16進数・8進数に変換できるんですが…
10進数に変換する方法がわかりません。

P.S できれば、16進数→10進数、16進数や10進数→2進数
…に、変換する方法も、よろしければ教えてくださいませ
m(_ _)m

Aベストアンサー

16進数→10進数は

Dim StrHex As String
Dim intVal As Integer
StrHex = "1A"
intVal = Val("&H" & StrHex)

で出来ます。


申し訳ありませんが2進数への変換はよく分かりません。

Q2 ~ 200 の素数 a, b, c (a < b < c) が、b - a = c - b を満たすa,b,cをビット操作を用いて求め、すべてを表示せよ

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&(1<<(i-1))&&(intval&(i+j-1))&&(intval&(1<<(i+2*j-1)))) print("%3d %3d %3d (%3d)\n",i,i+j,i+2*j,j);
}/*三つ子の素数を調べ出力

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&...続きを読む

Aベストアンサー

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

第iビットを1にするときは
intval[i>>5]|=1<<(i&31);

とすれば良いでしょう。
関数やマクロを用意することをお勧めします。
例えば
int get(int intval[],int i)
{
return (intval[i>>5]>>(i&31))&1;/*0か1が返って来る。*/
}

void on(int intval[],int i)
{
intval[i>>5]|=1<<(i&31);
}

という感じです。

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

...続きを読む


人気Q&Aランキング

おすすめ情報