プロが教える店舗&オフィスのセキュリティ対策術

C++の基本的な配列でわからないことがあります。

例えば以下のような,3段落があるテキストファイルを用意しておき,
--------------
//abc.txt
abcde
fghij
klmno
--------------
用意した配列char data[3][20]へ,
上から順番にdata[0]に"abcde",data[1]に"fghij",data[2]に"klmno"を挿入したいです。

とりあえず1行だけ,以下のようなプログラムで出力表示できました。

#include <string>
#include <iostream>
using namespace std;

int main()
{
char cir_data[3][20];

string filename("abc.txt");
FILE* fp = fopen( filename.c_str(), "r" );
fgets(data[0], 20, fp);
cout << data[0] << endl;
fclose(fp);
return 0;
}

結果は,
--------------------
abcde

--------------------
となったので,2・3番目もforループでできるかなと思ったら,良い結果が出ません。
以下は間違えているプログラムです。

int main()
{
char cir_data[3][20];
int i;

string filename("abc.txt");
FILE* fp = fopen( filename.c_str(), "r" );

for(i=0; ; ){
fgets(cir_data[i], 20, fp);
if(strlen(cir_data[i])<3) break;
if(cir_data[i][0] != '/') i++;
cout << cir_data[i] << endl;
}
fclose(fp);
cout << "i = " << i << endl;
return 0;
}

結果は文字化けしてます。
何回ループしたか,iも出力してみましたが,なぜか6回カウントされています。

どこが誤っているのかわからず困っています。

A 回答 (1件)

>fgets(data[0], 20, fp);


>cout << data[0] << endl;

この部分を、配列の添字が0,1,2と変化するように
for文を書けばよい、というのはわかりますか?

int型の変数iを用意して、iが0,1,2と変化するような
for文は書けますか?(for文の中身は、とりあえず何もなし)
    • good
    • 0
この回答へのお礼

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

すいません。データが格納されているか確認のためのcoutの部分が間違ってました…。
for文の外に出したら,きちんと入っているのを確認できました。

お礼日時:2008/12/30 16:46

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