[請益] 成績資料計算建檔

作者: luckycola (小可拉)   2015-04-13 21:34:12
小弟現在才開始學C
所以想請教版上的大大
目標:把一個檔案讀進來計算後在輸出成另一個檔案
前遇到的問題:讀到的檔案,不知道要怎麼把它分成陣列的迴圈
以下是輸入及輸出:
input:
Q1 Q2 Q3 Q4 MidI MidII Final
A 100 90 80 100 89 99 88
B 90 90 100 100 99 100 95
C 100 90 100 70 78 78 80
D 80 90 90 100 89 99 85
E 65 72 77 68 62 70 65
F 60 55 38 62 65 60 50
G 83 77 88 76 79 72 76
output需要1和2
output1:
Q1 Q2 Q3 Q4 MidI MidII Final
Average: 82 80 82 83 81 84 95
Minimum: 60 54 38 62 62 60 50
Maximum: 100 90 100 100 99 100 95
output2:
成績
A B
B A
C B
D A
E C
F A
G B
這是目前寫出來的
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char grade();
int main()
{
FILE *input_file, *output_file;
char file_name[40];
char buf[100];
char *token;
char mychar;
int m, n, i;
int row = 0, col = 0;
char input[] = "C:\\Users\\Administrator\\Documents\\
Visual Studio 2013\\Projects\\parse_command_line\\
parse_command_line\\input.txt";//這是input檔案的路徑
char output[] = "output.txt";
if ((output_file = fopen(output, "w")) == NULL)
{
printf("Can not open %s.\n", output);
return;
}
if ((input_file = fopen(input, "r")) == NULL)
{
printf("Can not open %s.\n", input);
return;
}
else
{
while ((mychar = fgetc(input_file)) != EOF)
{
fputc(mychar, output_file);
putchar(mychar);
}
//fclose(input_file);
//fclose(output_file);
}
//Create two dimesion array
int **ptr = (char*)malloc(row * sizeof(int));
for (int i = 0; i < row; i++)
{
ptr[i] = (int)malloc(sizeof(int) * col);
}
while (fgets(buf, sizeof(buf), input_file) != NULL)
{
const char *temp[8];
token = strtok(NULL, ",");
strcpy(temp[0], token);
token = strtok(NULL, ",");
temp[1] = atoi(token);
token = strtok(NULL, ",");
temp[2] = atoi(token);
token = strtok(NULL, ",");
temp[3] = atoi(token);
token = strtok(NULL, ",");
temp[4] = atoi(token);
token = strtok(NULL, ",");
temp[5] = atoi(token);
token = strtok(NULL, ",");
temp[6] = atoi(token);
token = strtok(NULL, ",");
temp[7] = atoi(token);
//printf("%s, %d, %d, %d, %d, %d, %d, %d\n", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5], temp[6], temp[7]);
grade(&temp[0], &temp[1], &temp[2], &temp[3], &temp[4], &temp[5], &temp[6], &temp[7]);
puts(temp[0], ptr[row][col]);
puts(grade, ptr[row][col++]);
//move pointer to next row
row++;
}
//Write data into output.txt
for (int m = 0; m < row; m++)
{
int n = 0;
fputs(ptr[m][n] + " " + ptr[m][n+1], output_file);
}
//Free array
for (int i = 0; i < row; i++)
{
free(ptr[i]);
}
//Free pointer
free(ptr);
fclose(input_file);
fclose(output_file);
return 0;
}
//Compute character grade for student
char grade(int q1, int q2, int q3, int q4, int mid1, int mid2, int final)
{
int total;
char grade;
total = 0;
total = (q1 * 0.1) + (q2 * 0.1) + (q3 * 0.1) + (q4 * 0.1) + (mid1 * 0.2) + (mid2 * 0.15) + (final * 0.25);
if (total >= 90)
{
grade = "A";
}
else if (total >= 80 && total < 90)
{
grade = "B";
}
else if (total >= 70 && total < 80)
{
grade = "C";
}
else if (total >= 60 && total < 70)
{
grade = "D";
}
else
grade = "F";
return grade;
}

Links booklink

Contact Us: admin [ a t ] ucptt.com