私はそれを自分自身を持って...
#include <stdio.h>
#include <stdlib.h>
// Name of file to be created and data saved in
#define FILENAME "students_and_grades.txt"
// Size of arrays for names
#define NAME_ARRAY_SIZE 25
// Declare arrays
char arrcName1[NAME_ARRAY_SIZE];
char arrcName2[NAME_ARRAY_SIZE];
char arrcName3[NAME_ARRAY_SIZE];
char arrcName4[NAME_ARRAY_SIZE];
char arrcHighestName[NAME_ARRAY_SIZE];
char arrcLowestName[NAME_ARRAY_SIZE];
int main()
{
printf("----Tyler Procko----\n\n\n");
//Declare
int iScore1, iScore2, iScore3, iScore4;
int iHighestScore, iLowestScore;
double dScoreAverage;
// Declare file pointer
FILE *Fpointer;
// Open file for writing
Fpointer = fopen(FILENAME, "w");
// Ask user for first student name and score
printf("What is the first student's name? ");
scanf("%s", arrcName1);
// Check range (0-100)
do
{
printf("What is the first student's grade? ");
scanf("%d", &iScore1);
} while ((iScore1 < 0) || (iScore1 > 100));
// Ask user for second student name and score
printf("What is the second student's name? ");
scanf("%s", arrcName2);
// Check range (0-100)
do
{
printf("What is the second student's grade? ");
scanf("%d", &iScore2);
} while ((iScore2 < 0) || (iScore2 > 100));
// Ask user for third student name and score
printf("What is the third student's name? ");
scanf("%s", arrcName3);
// Check range (0-100)
do
{
printf("What is the third student's grade? ");
scanf("%d", &iScore3);
} while ((iScore3 < 0) || (iScore3 > 100));
// Ask user for fourth student name and score
printf("What is the fourth student's name? ");
scanf("%s", arrcName4);
// Check range (0-100)
do
{
printf("What is the fourth student's grade? ");
scanf("%d", &iScore4);
} while ((iScore4 < 0) || (iScore4 > 100));
// Print student name's and grades to file
fprintf(Fpointer, "%s %d\n", arrcName1, iScore1);
fprintf(Fpointer, "%s %d\n", arrcName2, iScore2);
fprintf(Fpointer, "%s %d\n", arrcName3, iScore3);
fprintf(Fpointer, "%s %d\n", arrcName4, iScore4);
// Close file
fclose(Fpointer);
// Open file for reading
Fpointer = fopen(FILENAME, "r");
// If file is there and working properly, scan it
if (Fpointer != NULL)
{
// Scan file for data
fscanf(Fpointer, "%s %d", arrcName1, &iScore1);
fscanf(Fpointer, "%s %d", arrcName2, &iScore2);
fscanf(Fpointer, "%s %d", arrcName3, &iScore3);
fscanf(Fpointer, "%s %d", arrcName4, &iScore4);
}
// Otherwise, ERROR
else
{
printf("ERROR: File not found!");
}
// Display it all, just for the visual
printf("\nStudent one, %s, scored a %d.\n", arrcName1, iScore1);
printf("Student two, %s, scored a %d.\n", arrcName2, iScore2);
printf("Student three, %s, scored a %d.\n", arrcName3, iScore3);
printf("Student four, %s, scored a %d.\n\n", arrcName4, iScore4);
// Assume the first is the highest
iHighestScore = iScore1;
strcpy(arrcHighestName, arrcName1);
// Assume the first is the lowest
iLowestScore = iScore1;
strcpy(arrcLowestName, arrcName1);
// Compare score 2 to score 1
// Highest
if (iScore2 > iScore1)
{
iHighestScore = iScore2;
strcpy(arrcHighestName, arrcName2);
}
// Lowest
if (iScore2 < iScore1)
{
iLowestScore = iScore2;
strcpy(arrcLowestName, arrcName2);
}
// Compare score 3 to score 2 and 1
// Highest
if ((iScore3 > iScore2) && (iScore3 > iScore1))
{
iHighestScore = iScore3;
strcpy(arrcHighestName, arrcName3);
}
// Lowest
if ((iScore3 < iScore2) && (iScore3 < iScore1))
{
iLowestScore = iScore3;
strcpy(arrcLowestName, arrcName3);
}
// Compare score 4 to score 3, 2 and 1
// Highest
if ((iScore4 > iScore3) && (iScore4 > iScore2) && (iScore4 > iScore1))
{
iHighestScore = iScore4;
strcpy(arrcHighestName, arrcName4);
}
// Lowest
if ((iScore4 < iScore3) && (iScore4 < iScore2) && (iScore4 < iScore1))
{
iLowestScore = iScore4;
strcpy(arrcLowestName, arrcName4);
}
// Print highest and lowest scores and their respective students
printf("\nThe highest score was a %d from %s.\n", iHighestScore,
arrcHighestName);
printf("The lowest score was a %d from %s.\n", iLowestScore,
arrcLowestName);
// Perform average calculation and print result
dScoreAverage = (iScore1 + iScore2 + iScore3 + iScore4)/4.0;
printf("\n\nThe test average is %.2f\n\n", dScoreAverage);
// Close file
fclose(Fpointer);
return 0;
大丈夫! 2番目のscanfを%sに変更し、fprintfの%dを%sに変更しました。それがなぜそうであるか説明できますか?私は整数配列としてinput2を指定したので、それを文字列として入れるのはちょっと奇妙なようです。 – Psychobagger
あなたは整数配列としてinput2を定義しています。コンパイラはこれについて警告する必要があります。メモリオーバーフローの問題があるかもしれませんが、それは脇に... –
putまたはwriteの出力を読み込む必要がある場合は、それがあなたが得ようとしているものです。 Cの文字列と整数の間の変換は、特に新しい場合には苦痛になります。整数が必要になるまでデータを文字列として扱い、変換する方が簡単です。 –