2014-10-20 1 views
-5

누구든지 내 코드를 변경하여 주 함수에서 수행되는 대신 테이블의 각 행을 평균화하는 함수를 어떻게 포함시킬 수 있는지 알고 있습니까? process_student 함수로 코드를 실행할 때마다 테이블을 전혀 인쇄하지 않습니다. 내 "작동하지 않는"코드를 먼저 포함하고 process_student 함수가 포함 된 실패한 코드를 포함했습니다. 미리 감사드립니다!C 프로그램 내에서 함수를 어떻게 중첩시킬 수 있습니까?

또한 리디렉션 된 입력 .txt 파일을 사용하고 있습니다.

#include <stdio.h> 

int main(void) 
{ 

int month = 0; 
int date = 0; 
int year = 0; 
int x = 0; 
int id = 0; 
int min_user = 0; 
int ms = 0; 
int realTest = 0; 
float min = 10000000; 
float t1 = 0; 
float t2 = 0; 
float t3 = 0; 
float t4 = 0; 
float avg_trial = 0; 

scanf("%d %d %d", &month, &date, &year); 
printf("\nStudy Date: %02d/%02d/%02d\n", month, date, year); 

printf("Student Trial-1 Trial-2 Trial-3 Trial-4 Average\n"); 

while (x < 10) { 
    realTest = 0;  
    scanf("%d %f %f %f %f", &id, &t1, &t2, &t3, &t4); 
    if (t1>0) 
     realTest += 1; 
    if (t2>0) 
     realTest += 1; 
    if (t3>0) 
     realTest += 1; 
    if (t4>0) 
     realTest += 1; 
    avg_trial = (t1+t2+t3+t4)/realTest; 
    if (realTest == 0) 
     avg_trial = 0.000;   
    if (id<1000) { 
     printf(" %d %.3f %.3f %.3f %.3f %.3f\n", id, t1, t2, t3, t4, avg_trial); 
     x++; 
     } 
    else { 
     printf(" %d %.3f %.3f %.3f %.3f %.3f\n", id, t1, t2, t3, t4, avg_trial); 
     x++; 
    } 
    if (avg_trial < min && avg_trial > 0) { 
     min = avg_trial; 
     min_user = id; 
    } 

} 

ms = min * 1000; 
printf("\nStudent %d had the lowest average of %.3f seconds (%d milliseconds)\n", min_user, min, ms); 

return 0; 
} 

이것은 process_student 기능이 포함되어 내 실패 코드 : 사용법 #include

int main(void) 
{ 

int month = 0; 
int date = 0; 
int year = 0; 
int x = 0; 
int id = 0; 
int min_user = 0; 
int ms = 0; 
float min = 10000000; 
float t1 = 0; 
float t2 = 0; 
float t3 = 0; 
float t4 = 0; 
float avg_trial = 0; 

scanf("%d %d %d", &month, &date, &year); 
printf("\nStudy Date: %02d/%02d/%02d\n", month, date, year); 

printf("Student Trial-1 Trial-2 Trial-3 Trial-4 Average\n"); 

ms = process_student(min) * 1000; 
printf("\nStudent %d had the lowest average of %.3f seconds (%d milliseconds)\n", min_user, min, ms); 

int process_student(void) { 
float t1, t2, t3, t4, avg_trial, min; 
int min_user; 
int realTest = 0;  

while (x < 10) {  
scanf("%d %f %f %f %f", &id, &t1, &t2, &t3, &t4); 
if (t1>0) 
    realTest += 1; 
if (t2>0) 
    realTest += 1; 
if (t3>0) 
    realTest += 1; 
if (t4>0) 
    realTest += 1; 
avg_trial = (t1+t2+t3+t4)/realTest; 
if (realTest == 0) 
    avg_trial = 0.000; 
if (id<1000) { 
    printf(" %d %.3f %.3f %.3f %.3f %.3f\n", id, t1, t2, t3, t4, avg_trial); 
    x++; 
} 
else { 
    printf(" %d %.3f %.3f %.3f %.3f %.3f\n", id, t1, t2, t3, t4, avg_trial); 
    x++; 
} 
if (avg_trial < min && avg_trial > 0) { 
    min = avg_trial; 
    min_user = id; 
} 

} 

return min; 
return min_user; 
} 

return 0; 
} 
+0

... 왜? 이 기능이 존재하지 않는다는 것 외에도, 왜이 프로그램은 중첩 된 함수를 필요로합니까? – Leushenko

+0

기본적으로 이것은 C 코드에서 잘못된 것입니다. 중첩 된 함수는 C에서 허용되지 않습니다. 함수를 main에서 꺼내면 괜찮을 것입니다. – shuttle87

+2

귀하의 게시물은 적절한 코드 형식으로 인해 많은 이점을 얻습니다. 그것은 두 배의'return' 문장을 사용하는 것을 피할 수 있습니다! – ChiefTwoPencils

답변

1

그냥 주 전에 중첩 된 함수를 정의 또는 주 이전 또는 헤더에 선언을 추가하고 다른 곳에서 정의를 . 중첩 된 기능이 필요한 이유가없는 것 같습니다.

중첩 된 함수는 적법한 ISO C가 아닙니다. GNU C 컴파일러는이를 확장자로 허용합니다. 그러나 다시 말하자면, process_student()을 표준 기능으로 선언하고 정의하지 않아도되는 것 같습니다.

1

이렇게 기능을 이동해야합니다.

당신이 함수에 변수를 전달할 수 있도록 "분을 떠"에 "무효"를 변경해야하는 프로그램

int process_student(float min); 

의 맨 위에 라인이 추가합니다.

기본적으로 프로그램 내에서 전체 기능을 복사하여 아래에 붙여 넣으십시오. 함수 내에서 변수를 재 선언해야합니다.

기능이 작동하는 방법에 대한 간단한 explination

,

int functionName(int sentvariable1 int sentvariable2); 

// FUNCTIONNAME 주 프로그램 "sentvariable1"와 "intsentvariable2"두 interger 값을 받아 봐 것입니다 및 interger 값을 반환합니다.

은이 X, A와 B의 모든 주요 기능 어딘가에 선언되고있는이

x = functionName(a,b) 

같은 메인 프로그램에서 호출 할 것입니다.

관련 문제