(至急)ファイルオープン

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぶっさん

(至急)ファイルオープン

#1

投稿記事 by ぶっさん » 9年前

はじめまして。
現在プログラムをつくるために分担してやっているのですが、
大学のGPAを計算する関数を作成中なんですが、5つのファイルテキストの中からひとつオープンして、
テキストを読み込み、GPA計算をしてから新たにテキストファイルに保存するプログラムを作りたいのですが、
複数のテキストの入出力をどうしていいのかわかりません。

どなたかご教授いただけませんでしょうか。

ぶっさん

Re: (至急)ファイルオープン

#2

投稿記事 by ぶっさん » 9年前

追記 C言語です。
#include<stdio.h>
int main(void)
{

FILE *fp;
int s,a,b,c,f;
double gpa,asum,bsum;
int tani[5];


switch(a.txt){
case 0:
if((fp=fopen("a.txt", "r")) == NULL)
printf("ファイルオープンできません。\n");
break;
case 1:
if((fp=fopen("b.txt", "r")) == NULL)
printf("ファイルオープンできません。\n");
break;
case 2:
if((fp=fopen("c.txt", "r")) == NULL)
printf("ファイルオープンできません。\n");
break;
case 3:
if((fp=fopen("d.txt", "r")) == NULL)
printf("ファイルオープンできません。\n");
break;
case 4:
if((fp=fopen("e.txt", "r")) == NULL)
printf("ファイルオープンできません。\n");}
else{
fscanf(fp,"%d %d %d %d %d",
&tani[0],&tani[1],&tani[2],&tani[3],&tani[4]);
}

asum = (tani[0] + 4 * tani[1] + 3 tani[2] * 2 + tani[1] * 1);
bsum = tani[0]+tani[1]+tani[2]+tani[3]+tani[4];

gpa = asum / bsum;

printf("gpaは%1.fです。",gpa);

fclose(fp);

return(0);

}
これで通りませんでした。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: (至急)ファイルオープン

#3

投稿記事 by みけCAT » 9年前

コードを提示する際は、BBCodeを有効にした(無効にしない)状態でBBCodeのcodeタグで囲んでいただけると、見やすくてありがたいです。
ぶっさん さんが書きました:5つのファイルテキストの中からひとつオープンして、
テキストを読み込み、
オープンするファイルはどのようにして選ぶようにしたいのですか?
ぶっさん さんが書きました:複数のテキストの入出力をどうしていいのかわかりません。
適切なプログラムを書き、コンパイルし、適切な環境(入力やファイルの配置など)で実行すればいいでしょう。
具体的な操作手順を自然言語で説明できますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ぶっさん

Re: (至急)ファイルオープン

#4

投稿記事 by ぶっさん » 9年前

最終的にはmain関数から起動し、自動で読み込ませたいです。

単体テストをするので現在は入力により開く予定です。

入力により5つのテキストファイルのひとつをオープンします。
数値が入力されたテキストファイルをオープンし、数値を読み込みます。
オープンしたファイルを計算式に当てはめ、計算を行います。
計算された値を新たなテキストファイルに書き込みをする予定です。

これでわかりますでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: (至急)ファイルオープン

#5

投稿記事 by みけCAT » 9年前

こんな感じでしょうか?

コード:

#include <stdio.h>

int main(void) {
	const char *input_candidates[] = {
		"a.txt", "b.txt", "c.txt", "d.txt", "e.txt"
	};
	const char *output = "out.txt";
	FILE* fp;
	double gpa, asum, bsum;
	int tani[5];
	int file_id;

	/* 入力により */
	do {
		if (scanf("%d", &file_id) != 1) return 1;
	} while (file_id < 0 || (int)(sizeof(input_candidates) / sizeof(*input_candidates)) <= file_id);
	/* 5つのテキストファイルのひとつをオープンします。 */
	if ((fp = fopen(input_candidates[file_id], "r")) == NULL) {
		printf("ファイルオープンできません。\n");
		return 1;
	}

	/* 数値を読み込みます。 */
	if (fscanf(fp,"%d %d %d %d %d",&tani[0],&tani[1],&tani[2],&tani[3],&tani[4]) != 5) {
		printf("数値読み込みできません。\n");
		fclose(fp);
		return 1;
	}
	fclose(fp);

	/* 計算式に当てはめ、計算を行います。 */
	asum = (tani[0] + 4 * tani[1] + tani[2] * 2 + tani[1] * 1);
	bsum = tani[0]+tani[1]+tani[2]+tani[3]+tani[4];

	gpa = asum / bsum;

	/* 計算された値を新たなテキストファイルに書き込みをする */
	if ((fp = fopen(output, "w")) == NULL) {
		printf("出力ファイルオープンできません。\n");
		return 1;
	}
	fprintf(fp,"gpaは%1.fです。",gpa);
	fclose(fp);

	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る