2016-11-17 12 views
0

基本的に、ユーザーに4つの名前と4つの等級をテキストファイルに入力させたい(2列)。ただ例えば:C(基本的なもの) - ユーザー入力をファイルに書き込む

メアリー98

マイク60

ジョン78

ベス89

私は(おそらくfscanfは付き)ファイルを読み込み、最高を表示できるようにしたいです/低学年、およびそれらの平均。だから私はすべての入力のための変数を作成する必要がありますか?今日のクラスでは構造体について学んだので、実装する必要があると仮定しています。私は実際に便利なコードを持っていないが、ここでのスタートだ:

. 
. 
. 

int main() 
{ 

int i; 

FILE *Fpointer; 
char input[100]; 
int input2[4]; 


Fpointer = fopen("file.txt", "w"); 

for(i = 0; i < 4; i++) 
{ 
    printf("Enter a name>"); 
    scanf("%s", input); 
    printf("Enter a grade>"); 
    // User Josh Bressers told me to change the below %d to %s 
    scanf("%s", input2); 
    // And the second %d to %s here 
    // The program prints 4 names and 4 numbers perfectly now 
    fprintf(Fpointer, "%s %s", input, input2); 
    fprintf(Fpointer, "\n"); 

} 

fclose(Fpointer); 

return 0; 


} 

プログラムは、私は数字を読んでいましたか、4人の名前と番号のユーザーの入力を取ることを今と最初の段落に記載されている計算を行います?どんな助けもありがとう!

おかげで、

TP

EDIT:ITはMYSELF GOT(UGLYが、それは動作します)

答えて

0

私はそれを自分自身を持って...

#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; 
0

読むには、文字列ではなく整数としてINPUT2。文字列をatoi()して整数を取得するか、%dを%sに変更して文字列として書き出すことができます。

+0

大丈夫! 2番目のscanfを%sに変更し、fprintfの%dを%sに変更しました。それがなぜそうであるか説明できますか?私は整数配列としてinput2を指定したので、それを文字列として入れるのはちょっと奇妙なようです。 – Psychobagger

+0

あなたは整数配列としてinput2を定義しています。コンパイラはこれについて警告する必要があります。メモリオーバーフローの問題があるかもしれませんが、それは脇に... –

+0

putまたはwriteの出力を読み込む必要がある場合は、それがあなたが得ようとしているものです。 Cの文字列と整数の間の変換は、特に新しい場合には苦痛になります。整数が必要になるまでデータを文字列として扱い、変換する方が簡単です。 –

関連する問題