- 締切済み
ファイルからの読み込みについて
スペースで区切られた数字列を3つずつ取り、3つ目の数字列の最後の数字が奇数ならば1を、偶数ならば2を配列に格納するプログラムを作っているのですが、 具体例 203 255 254 203 255 255 203 255 254 203 255 254 203 255 254 203 255 255 203 255 255 203 255 255 203 255 254 203 255 255 とあれば、2,1,2,2,2,1,1,1,2,1と順に格納する プログラムの実行がうまくいかず悩んでいます。 関係する部分を書き出すと b = 0; n = 0; m = 0; while(1){ data = fgetc(fi); if(data == EOF) break; a[n] = data; if(' ' == a[n]){ b++; } if(b == 3){ b = 0; t = a[n-1]; n = 0; if(t == '1'|| t == '3' ||t == '5' || t == '7'|| t == '9'){ c[m] = 1; } else{ c[m] = 2; } m++; } else n++; } となっているのですが、上に書いた数字列をfiに読み込んで実行し、配列cを出力してみたところ 2122222222となっていました。 改行前は正確に出力されているので、改行する部分でなにか不都合が起こっているのかなと思い、いろいろ考えたのですが解決しません。 どなたかよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
補足
#include<stdio.h> int main(void) { FILE *fi; char fname[100], ss[255], d,a[100], t, ch; int data,count, b, n,m, co, err, c[1000]; printf("file name?\n"); gets(fname); fi = fopen(fname,"r"); if(fi == NULL){ exit(1); } fgets(ss,255,fi); if(ss[0]!='P') err = 1; if(ss[1]!='3') err = 1; if(err ==1){ printf("file type is wrong\n"); exit(1); } count = 0; while(count < 2){ d = fgetc(fi); if(d =='\n' ){ count++; } if(d == '#'){ count--; } } b = 0; n = 0; m = 0; while(1){ data = fgetc(fi); if(data == EOF) break; a[n] = data; if(' ' == a[n]){ b++; } if(b == 3){ b = 0; t = a[n-1]; n = 0; if(t == '1'|| t == '3' ||t == '5' || t == '7'|| t == '9'){ c[m] = 1; } else{ c[m] = 2; } m++; } else n++; } m = 0; while(c[m] ==1 || c[m] == 2){ count = 0; while(count < 8){ if(c[m] == 1){ ch++; } ch = ch + ch; count++; m++; } printf("%c",ch); } fclose(fi); } です。 冒頭の部分は、読み込んだファイルがppm形式であるか判定し、ヘッダ部分を読み飛ばすためのものです。 最後のwhile文は別の作業ですので気にしないでください。 fi:数字列の書かれたファイルを読み込みます dataはEOFかどうかを判定するための変数です。 EOFでない場合aにそれを格納します。 スペースをいくつ読み込んだかをbに記録し、bが3になったとき tにスペースよりひとつ前の文字a[n-1]を格納します。 tが奇数字である場合に1を、それ以外の場合2をcに格納します。