2010-11-21 2 views
1

저는 C를 배우고 기능 장을 연습하고 있습니다. 그래서 저는 3 개의 파일과 2 개의 작은 함수로 구성된 작은 프로그램을 작성했습니다. 진실하게 그것은 작동하지 않는다. 오류가 없으며 함수가 단순히 실행되지 않고 이유를 모르겠습니다.C.를 사용하여 함수를 사용한 프로그래밍 기능이 실행되지 않았습니다.

우선이 기능은 내 기능 만 선언하는 내 헤더 파일입니다.

//employee.h 
int addEmployee(void); 
int printEmployee(int i); 

다음 파일은 함수를 정의한 것입니다.

//employee.c 
#include "employee.h" 
#include <stdio.h> 
#include <ctype.h> 

int numE; 
int i; 

int addEmployee(void) 
{ 
    printf("Please type in the number of your employees: "); 
    scanf_s("%d", &numE); 
    i = numE; 
    return i; 
} 

int printEmployee(int i) 
{ 
    printf("%d", i); 
    getchar(); 
    getchar(); 
    return i; 
} 

그리고 마지막 파일이 기능을 실행하는 데 사용됩니다.

//lab6.c 
#include "employee.h" 
#include <stdio.h> 
#include <ctype.h> 


int main() 
{ 
    int addEmployee(); 
    int printEmployee(); 
    return 0; 
} 
+0

출력으로 무엇을 얻습니까? –

답변

4

.

"이전"기능을 호출하지 않습니다. 다른 사람들이 지적으로

이 작동해야합니다

int main() 
{ 
    int emp = addEmployee(); 
    printEmployee(emp); 
    return 0; 
} 

당신이 그것을 저장, addEmployee()를 호출하고 있으므로 emp 다음은 printEmployee를 사용하여 emp 인쇄에 결과입니다. printEmployee이 하나의 매개 변수로 선언되었으므로 emp을 입력하면됩니다.

+0

고맙습니다. 이제 제대로 작동합니다. – Ordo

2

은 당신이 원하는 :

int main() 
{ 
    addEmployee(); 
    printEmployee(1); 

    return 0; 
} 
+0

함수 호출 전에 int가 있다는 것을 알지 못했습니다. 메인 내에서 이러한 문을 사용하면 "int addEmployee();" –

+0

고마워하지만 지금은 오류가 발생합니다. "이 함수는 제로 인수를 받아들이지 않습니다." 나는 "int i"를 타이핑했는데 그것도 효과가 없습니다. 함수가 addEmployee 다른 함수에서 값을 얻길 원합니다. – Ordo

+3

사실 그것은 두 개의 함수 포인터를 정의하지 않고 함수를 다시 선언하는 것처럼 보입니다.'int main() {int func(); func(); } void func() {}'이 작동합니다. – meagar

1

변경이 : 여기에

int main() 
{ 
    int addEmployee(); 
    int printEmployee(); 
    return 0; 
} 

:

int main() 
{ 
    addEmployee(); 
    printEmployee(); 
    return 0; 
} 

당신이 그들을 호출하는 대신 기능을 다시 선언하고를 .

또한 printEmployee 함수를 정수 인수를 허용하지 않도록 변경해야합니다. addEmployee과 같은 전역 변수를 사용해야하는 것 같습니다. 이것은 나쁜 생각이다. 전역 변수는 일반적으로 피해야합니다. addEmployee은 아마도 직원 ID를 반환해야합니다.이 직원 ID는 저장 한 다음 printEmployee에 전달할 수 있습니다.

3

함수를 호출 할 때 호출 앞에 반환 형식을 넣지 마십시오. 호출은 단순히 함수의 이름과 함께 호출하는 모든 매개 변수입니다.

int main() { 
    addEmployee(); 
    printEmployee(1); 

    return 0; 
} 

편집 : 그래서 당신의 주요 기능은 다음과 같아야합니다 그래서 employee.c 파일에, 당신은 변수 i 오른쪽을 명령 줄에서 직원의 수를 가지고 저장 addEmployee()를 사용하려고? 그리고 얼마나 많은 직원이 진입했는지 알려주고 싶으 시다면 printEmployee()이 필요하십니까? 여기 당신이 그렇게하는 방법이 있습니다.

//employee.c 
#include "employee.h" 
#include <stdio.h> 
#include <ctype.h> 

int i; 

int addEmployee(void) 
{ 
    int numE; 
    printf("Please type in the number of your employees: "); 
    scanf_s("%d", &numE); 
    i = numE; 
} 

int printEmployee() 
{ 
    printf("%d", i); 
    getchar(); 
    getchar(); 
} 

다음은 내가 한 일입니다.

먼저, numE을 사용하는 addEmployee 함수의 로컬 변수를 만들었습니다. 일반적으로 가변 범위는 가능한 작게 유지해야합니다. 즉, 사용되는 가장 낮은 레벨로 유지해야합니다. 이 경우 numEaddEmployee()에 의해서만 필요하므로 해당 범위를 참조하십시오.

둘째, int printEmployee(int i)에서 매개 변수를 제거했습니다. 파일 수준에서 i 변수를 재정의했습니다. 따라서 numE에 읽은 번호를 i에 저장하고 있었지만 printEmployee()을 입력하면 그 값을 숨긴 새 i이 생성되었습니다. 주에서 printEmployee(1)을 호출하면 i에 값 1을 전달했으며 printEmployee(int i)에있었습니다.매개 변수를 제거하면 employee.ci을 숨길 수 있습니다.

마지막으로 반품을 취소했습니다. 함수는 C에서 아무것도 반환하지 않아도됩니다. 반환을 사용하지 않으려한다면 함수를 포함하는 코드가 추가됩니다.

lab6.c 파일에서이 작업을 수행 할 때 한 가지 더 많은 변경 사항이 있습니다. 당신이 지금 예상대로 작동합니다 printEmployee()

//lab6.c 
#include "employee.h" 
#include <stdio.h> 
#include <ctype.h> 


int main() 
{ 
    addEmployee(); 
    printEmployee(); 
    return 0; 
} 

에 대한 호출에서 매개 변수를 제거합니다. 당신은 기본적으로 0 인수와 함께 2 개 개의 새로운 기능을 선언하고

int main() 
{ 
    int addEmployee(); 
    int printEmployee(); 
    return 0; 
} 

를 사용

+0

감사합니다. 그러나 출력은 직원 수로 입력 한 것과 관계없이 항상 1입니다. – Ordo

+1

아, 네가하는 일을 알아. 잠시만, 이것은 타이핑을 요구할 것입니다. –

관련 문제