|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3231 [복사]
#include <stdio.h>
#include <stdlib.h>
int read_score();
char set_grade();
int main()
{
int total = 0, score=0, count = 0;
int grade_count[5]={0};
float average;
char grade;
FILE *fp=fopen("text.txt","r");
if(fp == NULL){
printf("파일이 없습니다\n");
return -1;
}
for (;;)
{
score=read_score(fp);
printf("\n");
if(score==-1)
break;
else
{
grade=set_grade(score,grade_count);
total += score;
count++;
printf("점수: %d\t학점:%c\n\n",score,grade);
}
}
if (count == 0 )
printf("입력 없음\n");
else
{
average = (float) total / count;
printf("총점: %d\n", total);
printf("평균: %5.2f\n", average);
printf("A개수:%d B개수:%d C개수:%d D개수:%d F개수:%d ",grade_count[0],grade_count[1],grade_count[2],grade_count[3],grade_count[4]);
}
system("pause");
return 0;
}
int read_score(FILE *fp)
{
int score;
if(fscanf(fp,"%d",&score)==EOF)
return -1;
printf("점수 입력 (0 to 100/-1은 끝): ");
fscanf(fp,"%d",&score);
while(score>100||score<-1)
{
fscanf(fp,"%d",&score);
}
return score;
}
char set_grade(int score, int grate_count[])
{
int fake;
fake=score/10;
if(fake==10)
{
grate_count[0]+=1;
return 'A';
}
else if(fake==9)
{
grate_count[1]+=1;
return 'B';
}
else if(fake==8)
{
grate_count[2]+=1;
return 'C';
}
else if(fake==7)
{
grate_count[3]+=1;
return 'D';
}
else
{
grate_count[4]+=1;
return 'F';
}
}
아까 질문한 코드인데 오류나는부분을 다 고쳤습니다...그런데 질문입니다...
리드함수를 바꾸고 싶습니다...
이렇게 바꿔봣습니다..
int read_score(FILE *fp)
{
int score;
if(fscanf(fp,"%d",&score)==EOF)
return -1;
printf("점수 입력 (0 to 100/-1은 끝): ");
while(1)
{
fscanf(fp,"%d",&score);
if(-1<=score&&score<=100)
return score;
}
}
그런데..이렇게 하니 어째 다 입력받질 못하더라구요.....
text.txt에 100 90 80 70 60 -1 을 저장했습니다.
그러면 다 입력받고 매인함수에서 -1이 반환됬을때 저 루프에서 탈출해야하는데.....
출력해보니...다입력받지 못하고
90 70 이거 2개만 입력받고 끝나더군요....
도데체 머가 문제일가요?
|
Hit : 3953 Date : 2011/12/05 12:13
|