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

ご質問させていただきます。
これは、fin2というファイルから数値を抜き出し配列に格納して、finの文字列と比較し、その文字列のある場所で配列の数値と比較し、合致したら、ある出力をするというものなんですが、
配列に格納した数値が、
a[1]=[123] b=[234]
a[1]=[345] b=[400]
というふうに増えていくときは問題ないですが、途中でたとえば
a[n]=100 b[n]=400
a[n+1]=300 b[n+1]=358
という風にn+1番目のaより、n番目のbが大きいときに、止まってしまうんです、これをうまく処理して最後まで比較させたいんですが、どうしてもうまくいきません。どなたかたすけてください。やはり、
n==b[yabu]の処理の後になんか書けばいいんでしょうか?長々と申し訳ございませんでした。

if(fin2!=NULL)
{
int yabu=0;
for(int i=0; fgets(c,CHARMAX,fin2)!=NULL;i++)
{
sscanf(c,"%d%*c%*c%d",&a[yabu],&b[yabu]);
fprintf(fout2,"%d::::::::::::::%d:%d\n",yabu,a[yabu],b[yabu]);
yabu++;
}
}

int yabu=0;
n=0;
while(fgetc(fin)!=EOF)
{
n++;
if(n==a[yabu])
{
fprintf(fout2,"A ");
}

else if(n==b[yabu])
{
fprintf(fout2,"B ");
yabu++;}

else
{fprintf(fout2,"C ");
}

}

printf("%d\n",yabu);

A 回答 (21件中21~21件)

こんにちは。

itohhといいます。

処理の内容がいまいち判らないのですが。

1.2つのファイルを読み込む。
2.1行の内容はa,bの2つの値が格納され複数行入っているので配列に格納する(fin2ファイル)
3.チェックしたい値が1行に1個入っている(finファイル)
4.3.の値を1つずつ2.の配列のaなのかbなのかをチェックしたい。

これでよいのでしょうか?

まず、このソースはコンパイルエラーになりませんか?
>for(int i=0; fgets(c,CHARMAX,fin2)!=NULL;i++)
fgetsの文法が間違っています。


>sscanf(c,"%d%*c%*c%d",&a[yabu],&b[yabu]);
"%d%*c%*c%d"と&a[yabu],&b[yabu]の数があっていません。
fin2ファイルの中のフォーマットはどのようになっているのでしょうか?

>while(fgetc(fin)!=EOF)
fgetsの文法が間違っています。(読み込んだデータはどこに格納するのでしょうか?)

2つ目のループはfinファイルがEOFまでループしますが、
比較しているのはカウンタ(n)ですよね?これで良いのですか?
finファイルのデータは関係ないのでしょうか?

この回答への補足

御回答ありがとうございます。コンパイルエラーになりませんよね?
びっくりしちゃいました(笑)
処理としては、
fin2ファイルは、
123..234 [英数字の羅列・・](改行)
300..434 [英数字](改行)
523..674 [英数字](改行)
800..934 [英数字](改行)・・・・・
みたいになってて、そこから数字だけをぬきだして、左の数字をa[yabu]に
右の数字をb[yabu]に格納します。
そして、こんどはfinファイルを読みます。このfinは半角英字のみが延々と
かかれているファイルで、これを頭から一文字ずつ読んでいって、a[0]に格納された数値と一致したなら、 cout<<"A"の処理をして、・・・というふうにやっています。・・・・とこのままだとfin2の数値が、単純に増加していけば問題ないのですが、途中でb[n]の数字の方がつぎのa[n+1]よりも大きくなってしまった場合そこで止まっちゃうんです。
123..234 [英数字の羅列・・](改行)
300..434 [英数字](改行)
523..1002 [英数字](改行)
800..934 [英数字](改行)・・・・・
とかいうばあい、3行目で止まっちゃうんです。
いろいろ考えたんですが、なんとかここまではこぎつけたものの、こっから
先がわかんないんです・・・・・。
itohさんのお力をかしてください!!よろしくお願いいたします。

補足日時:2002/02/10 01:24
    • good
    • 0

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