보통 C언어에서 자주 사용되는 입력함수는 scanf이고 출력함수는 printf 일 것이다.
그러나 동일 기능을하는 함수가 있다. 입력 fgets 함수, 출력 fputs 함수이다.
앞에 f는 "file"을 뜻하고 뒤에 s는 "string"을 뜻한다.
즉, string타입을 갖고 쓰는 함수라고 볼 수 있다.
fputs( ) 함수 원형 : int fputs(const char* str, FILE* pFile)
fgets( ) 함수 원형 : int fgets(char* str, int* num, FILE* pFile)
아래에서 파일대신 stdout과 stdin을 사용했는데, 이는 출력으로 모니터(stdout)을 쓰고, 입력으로 키보드(stdin)를 사용함 의미
#include <stdio.h>
void ClearLineFromReadBuffer(void);
int main()
{
char perID[7]; // ex) 880808'\0' 총 NULL을 포함한 7개 배열 메모리 할당.
char name[10];
fputs("주민번호 앞 6자리: ", stdout); // 모니터에 출력 (stdout)
fgets(perID, sizeof(perID), stdin); // 최대 크기 7 byte를 키보드(stdin)로 부터 입력 받음.
/************/
ClearLineFromReadBuffer(); // 입력 버퍼를 비우기. 그냥 읽어들임. 반환없이.
/************/
fputs("이름 입력: ", stdout); // 모니터에 출력
fgets(name, sizeof(name), stdin); // 최대 크기 10 byte를 키보드로 부터 입력 받음.
printf("주민번호: %s \n", perID);
printf("이름: %s \n", name);
return 0;
}
void ClearLineFromReadBuffer(void)
{
while (getchar() != '\n'); // 문자열의 끝을 알리는 '엔터키'가 들어올때까지 계속 Read가 되어짐. 즉, 버퍼의 값을 사용하지 않고 그냥 버려짐.
}
/*
함수 원형: int fflush(FILE * stream);
성공시 0을 반환, 실패시 EOF 반환
int fflush(stdout); // 모니터로 출력 될 버퍼를 비우는 함수! (stdout: 모니터 출력을 의미)
// **버퍼를 비운다는 것은, 목적지로 빨리 보냄(다 출력시켜라 를 의미)
*/
배열이름 아래 예를 들면 arr1[] 에서, arr1 자체는 포인터이다. 즉 arr1을 출력하면 해당 배열값들이 시작하는 곳에 대한 주소를 가리키고 있다.
그래서 배열을 함수 인자로 받을 때 자료형을 포인터로 써야 한다. 아래와 같이 int* param
아래 예시는 배열을 함수의 인자로 받아서 그 배열을 출력하는 예제이다.
#include <stdio.h>
/*
배열을 함수의 인자로 전달.
참고사항,
배열내부 index 갯수를 구하는 방법
-> sizeof(arr1)/sizeof(int) 이런식으로 구하면 된다.
*/
// 배열인자를 받아 배열 내부를 표시해주는 함수 (포인터를 이용)
void ShowArayElem(int* param, int len)
{
int i;
for (i = 0; i < len; i++)
printf("%d ", param[i]);
printf("\n");
}
int main()
{
int arr1[3] = { 1,2,3 };
int arr2[5] = { 4,5,6,7,8 };
// 배열내부의 index 갯수를 구하는 방법.
ShowArayElem(arr1, sizeof(arr1) / sizeof(int));
ShowArayElem(arr2, sizeof(arr2) / sizeof(int));
return 0;
}
배열 주소와 해당 배열의 사이즈를 인자로 받아서 출력 테스트
반응형
그러나 배열을 함수에 전달하는 방법은 아래와 같이 쓸 수도 있다. (위와 동일한 기능)
즉 포인터 (* param) 이 아닌, param[ ] 이러한 형태로 배열을 전달 할 수 있다는 것이다.
이는 둘다 동일한 뜻이며, param[ ] 로 작성하면, 코드를 읽는 사람이 "아~ 배열을 전달하구나~"하며 좀 더 가독성을 향상시킬 수 있다.
#include <stdio.h>
/*
배열을 함수의 인자로 전달.
참고사항,
배열내부 index 갯수를 구하는 방법
-> sizeof(arr1)/sizeof(int) 이런식으로 구하면 된다.
*/
// 배열을 인자로 받는 다른 방법.
// 인자로 배열을 전달 받는다는 느낌을 강하게 어필하기 위해.
void ShowArayElem(int param[], int len)
{
int i;
for (i = 0; i < len; i++)
printf("%d ", param[i]);
printf("\n");
}
int main()
{
int arr1[3] = { 1,2,3 };
int arr2[5] = { 4,5,6,7,8 };
// 배열내부의 index 갯수를 구하는 방법.
ShowArayElem(arr1, sizeof(arr1) / sizeof(int));
ShowArayElem(arr2, sizeof(arr2) / sizeof(int));
return 0;
}