はじめまして。
現在プログラムをつくるために分担してやっているのですが、
大学のGPAを計算する関数を作成中なんですが、5つのファイルテキストの中からひとつオープンして、
テキストを読み込み、GPA計算をしてから新たにテキストファイルに保存するプログラムを作りたいのですが、
複数のテキストの入出力をどうしていいのかわかりません。
どなたかご教授いただけませんでしょうか。
(至急)ファイルオープン
Re: (至急)ファイルオープン
追記 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);
}
これで通りませんでした。
#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);
}
これで通りませんでした。
Re: (至急)ファイルオープン
コードを提示する際は、BBCodeを有効にした(無効にしない)状態でBBCodeのcodeタグで囲んでいただけると、見やすくてありがたいです。
具体的な操作手順を自然言語で説明できますか?
オープンするファイルはどのようにして選ぶようにしたいのですか?ぶっさん さんが書きました:5つのファイルテキストの中からひとつオープンして、
テキストを読み込み、
適切なプログラムを書き、コンパイルし、適切な環境(入力やファイルの配置など)で実行すればいいでしょう。ぶっさん さんが書きました:複数のテキストの入出力をどうしていいのかわかりません。
具体的な操作手順を自然言語で説明できますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: (至急)ファイルオープン
最終的にはmain関数から起動し、自動で読み込ませたいです。
単体テストをするので現在は入力により開く予定です。
入力により5つのテキストファイルのひとつをオープンします。
数値が入力されたテキストファイルをオープンし、数値を読み込みます。
オープンしたファイルを計算式に当てはめ、計算を行います。
計算された値を新たなテキストファイルに書き込みをする予定です。
これでわかりますでしょうか?
単体テストをするので現在は入力により開く予定です。
入力により5つのテキストファイルのひとつをオープンします。
数値が入力されたテキストファイルをオープンし、数値を読み込みます。
オープンしたファイルを計算式に当てはめ、計算を行います。
計算された値を新たなテキストファイルに書き込みをする予定です。
これでわかりますでしょうか?
Re: (至急)ファイルオープン
こんな感じでしょうか?
#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で殴ればいい!(死亡フラグ)