사용자 인터페이스는 친절하게

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int count = 0;

	while (1)
	{
		printf("Current count is %d, Continue? (y/n)", count);

		if (getchar() == 'n')
			break;
		
		while (getchar() != '\\n')
			continue;

		count++;
	}

	return 0;
}

예제코드

‘continue’명령어가 잘 기억안나서 지난 강의를 살펴봤음. 집 컴 로컬에 워드로 저장한 내용이라 없었음. continue는 해당 조건을 만족할 경우 아래의 문을 실행시키지 않고 다시 루프문으로 돌아가는 명령어임.

위 예제코드에서 continue는 Escape sequence가 아닐 경우 즉, 엔터키를 입력하지 않은 경우 해당 while문에서 탈출하지 못하게 만듦. 즉 엔터를 입력했을때만 count++를 작동하게 만듦.

이는 ‘yyyyy’등의 여러 문자를 버퍼에 입력했을때 계속 while문에서 돌게 만드는 역할(프로그램이 끝나지 않게 하고, count++도 하지 않게 하는 역할)도 함.

만약 ‘nnnnn’을 입력하면(엔터를 치는 순간)

while (getchar() != '\\n')

  `continue;`

구문에 오기도 전에 breake가 끝내버림.

위의 구문이 없으면 ‘y’을 입력후 엔터키를 치면 엔터키도 ‘\n’으로 인식되서 count++가 두번 되버림.

사용자는 프로그래머의 의도대로 절대로 행동하지 않는다. 일부러 짓궂게 행동하는 사람들도 있음. 그런 경우들을 모두 꼼꼼하게 제어할 수 있어야 한다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int count = 0;

	while (1)
	{
		printf("Current count is %d, Continue? (y/n)", count);

		int c = getchar();

		if (c == 'n')
			break;
		else if (c == 'y')
		{
			while (getchar() != '\\n')
				continue;

			count++;
		}
		else
		{
			printf("Plese input y or n\\n");

			while (getchar() != '\\n')
				continue;
		}
	}

	return 0;
}

사용자가 y나 n이외의 값을 넣었을때 안내문을 추가했다. 우선 사용자의 입력값을 저장할 변수 c를 생성하고(int c = getchar();)

이후 if / else if / else문으로 각각 n, y, 이외의 값을 넣었을때의 출력을 처리했음.

그 다음에 프로그래밍 팁으로 알려주면, 위 코드처럼 같은 기능을 하는 코드가 중복될 경우(while(getchar() ≠ ‘n’)