본문 바로가기
Programming/C

문자열 입력과 출력 scanf_s, printf, fputs, fgets, _getch()

by 한 땀; 한 땀; 2021. 1. 8.
#include <stdio.h>

int main()
{
	char arr[30] = { 0 };

	printf("문자열 입력 : ");

	scanf_s("%s", arr, 30);

	printf("%s", arr);
	
	return 0;
}


입력 : hello wolrd

출력 : hello

scanf_s 는 문자열을 공백을 기준으로 입력 받기 때문에 공백이 입력되면 문자열의 끝으로 해석하고 더 이상 읽어들이지 않는다.

 

#include <stdio.h>

int main()
{
	char arr[30] = { 0 };

	printf("문자열 입력 : ");

	scanf_s("%s", arr, 30); // hello+공백 까지 입력받음
	printf("%s", arr);
	scanf_s("%s", arr, 30); // 입력버퍼에 남아있는 world가 전달 됨
	printf("%s", arr);
	
	return 0;
}


입력 : hello world

출력 : helloworld

이렇게 printf 문의 호출에 이어 바로 scanf_s 의 입력을 받게 되면 입력버퍼에 남아있는 world가 전달되어 바로 printf 문에서 호출로 이어진다.

 

공백을 포함하여 문자열을 입력 받으려면?

#include <stdio.h>

int main()
{
	char arr[30] = { 0 };

	fputs("문자열 입력 : ",stdout);

	fgets(arr,30,stdin);

	fputs(arr, stdout);

	return 0;
}


입력 : hello world
출력 : hello world

fgets 함수는 문자열의 끝을 의미하는 \0 입력 받을 때 까지 계속 읽어 들인다. 따라서 fputs에서 이어지는 호출도 그대로 입력받은 값을 출력하게 된다. 

 

키보드로 입력받은 값을 아스키코드 값으로 보고 싶다면?

#include <stdio.h>
#include <conio.h>

int main()
{
	int str;
	printf("문자 입력 : ");
	while (1) {
		str = _getch();
		printf("%d ", str);
	}
	return 0;
}

_getch() 함수는 버퍼를 사용하지 않고 키보드로부터 입력받은 값을 바로 입력받는다. 아스키코드 값을 확인하고 싶다면 위와 같이 확인할 수 있다.

'Programming > C' 카테고리의 다른 글

Pointer  (0) 2020.11.29

댓글