- 締切済み
プログラミング(構造体、ファイル入出力、コマンドライン引数)
プログラミング(C言語)の質問です。 コマンドライン引数を使って3点の座標の並びが1レコードに記録されたファイルを読み込み、3点の並びが、時計回りに三角形を形作るか、反時計回りに三角形を形作るか、直線(あるいは一点)上にあるかを判定し、読み込んだ各レコードを判定に従って、3つの出力ファイル(時計回りだけのファイル、反時計回りだけのファイル、直線だけのファイル)に分配して書き込むプログラムを作成しています。しかし、なかなか完成しない上、どこが間違っているのかも分かりません。下に私が作ったプログラムを添付しておくのでどこが間違っているのか指摘してください。よろしくお願いします。 #include <stdio.h> #define BUFLEN 1024 int main(int argc, char *argv[]){ int difference_x1, difference_y1, difference_x2, difference_y2; int cross_product; char buf[BUFLEN]; struct points{ int x; int y; } point_a, point_b, point_c; FILE *fp1, *fp2; while(fgets(buf, BUFLEN, fp1) != NULL){ fp1 = fopen(argv[1], "r"); fgets(buf, BUFLEN, fp1); sscanf(buf, "%d,%d,%d,%d,%d,%d", &point_a.x, &point_a.y, &point_b.x, &point_b.y, &point_c.x, &point_c.y); difference_x1 = point_b.x - point_a.x; difference_y1 = point_b.y - point_a.y; difference_x2 = point_c.x - point_a.x; difference_y2 = point_c.y - point_a.y; cross_product = difference_x1 * difference_y2 - difference_x2 * difference_y1; if(cross_product < 0){ fp2 = fopen("clockwise.txt", "w"); }else if(cross_product > 0){ fp2 = fopen("counterclockwise.txt", "w"); }else if(cross_product == 0){ fp2 = fopen("straightline.txt", "w"); } fprintf(fp2, "%d,%d,%d,%d,%d,%d", point_a.x, point_a.y, point_b.x, point_b.y, point_c.x, point_c.y); fclose(fp2); } fclose(fp1); return 0; }
補足
回答ありがとうございます。 指摘された通り直したら上手くいきました。 ただ、3つのファイルができたのはいいんですが、最後に判定したものしか書き込まれていません。判定したもの全てが書き込まれているようにしたいのですがどうしたらよいでしょうか?