작성
·
404
·
수정됨
2
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void display(char cr, int lines, int width);
int main()
{
char c;
int rows, cols;
// 종료를 깔끔하게 하지 못한다
// while(1)
// {
// scanf("%c %d %d", &c, &rows, &cols);
// while(getchar() != '\n') continue;
// display(c, rows, cols);
// }
printf("input one char and two int :\n");
while ((c = getchar()) != '\n')
{
scanf("%d %d", &rows, &cols);
display(c, rows, cols);
printf("input another character and two int : \n");
printf("press enter to quit.\n");
}
return 0;
}
void display(char cr, int lines, int width)
{
for(int i = 0; i < lines; i++)
{
for(int j = 0; j < width; j++)
{
printf("%c",cr);
}
printf("\n");
}
}
첫 번째는 강의 5분쯤 밑에 코드로 내려와서 실행하시는데 처음에 * 3 5엔터 후 종료되는 것이 아닌 % 2 2를 이어서 하시는데 제 딴에는 똑같이 따라한 것 같은데 첫번째 엔터 후 종료가 되버립니다.
두 번째는 밑에 display함수에서 저는 printf를 사용했고 선생님은 putchar을 사용하셨는데 제 생각에는 별다른 차이가 없을 것 같고 첫 번째 문제를 만나기 전까지는 결과가 이상이 없어 괜찮을 거 같은데 혹시나 해서 그냥 짧게 쓰고자 하는 목적인지 질문합니다
답변 2
2
안녕하세요, 답변 도우미 Soobak 입니다.
두 질문이 서로 조금씩 연관이 되어 있는 질문 같아요!
1. 첫 번째 엔터 후 프로그램이 종료되는 이유
- 교수님께서 설명해주신 것 처럼, scanf()
함수는 줄바꿈 문자를 버퍼에 계속해서 남겨두게 됩니다. 따라서, 질문해주신 8.5 숫자와 문자를 섞어서 입력받기 의 5:48 부분처럼 while (getchar() != '\n') continue;
부분과 같이, 버퍼에 남아있는 줄바꿈 문자들에 대한 처리가 필요합니다. 코드는 동일하게 작성하신 것이 맞지만, 교수님께서도 강의에서 약 1분 뒤 버퍼와 관련된 문제를 다루시므로 참고하시면 좋을 것 같습니다. 코드가 바로 종료되는 이유는 while()
문의 조건식의 getchar()
함수가 '버퍼에 남아있는 줄바꿈 문자' 를 읽어버리기 때문인 것 같습니다.
2. putchar()
함수와 printf()
함수의 차이
- 단순히 짧게 쓰기 위한 목적만은 아닙니다.
- 1번 질문에서 scanf()
함수와 getchar()
함수가 둘 다 입력을 받아오는 함수이지만 차이가 있었던 것과 같이, printf()
함수와 putchar()
함수 역시 차이가 있습니다.
- 여러가지 차이점들이 있지만, 지금은 학습하신 내용 중 8.1 입출력 버퍼 강의에서 교수님께서 소개해주신 내용, 즉, "putchar()
함수는 버퍼를 사용하지 않지만, printf()
함수의 경우 버퍼를 사용한다" 는 내용 정도만 이해하시면 좋을 것 같습니다.
추후 13. 파일 입출력 섹션에서 버퍼와 입출력 과정에 대하여 한번 더 공부하게 되실텐데요. 해당 섹션 이후에 입출력함수들과 버퍼에 대하여 조금 더 자세하게 찾아보시며 공부하는 것을 추천 드립니다. 그 때 쯤 다시 공부해보시면 더 많은 것을 이해하실 수 있을 것 같습니다.
답변을 작성하면서 질문자님이 꼼꼼하게, 잘 학습하고 계신 것이 느껴져서 인상 깊네요. 질문해주셔서 감사하고, 또 궁금하신 점 있으시면 편하게 댓글 남겨주세요. 감사합니다. 화이팅!!
1
감사합니다~~
마지막
putchar()
함수는 버퍼를 사용하지 않지만,printf()
함수의 경우 버퍼를 사용하지 않는다" 는 내용 정도만 이해하시면 좋을 것 같습니다. 이 부분은 printf함수의 경우 버퍼를 사용한다라고 이해하겠습니다