질문 두 가지가 있습니다
465
작성한 질문수 7
#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함수의 경우 버퍼를 사용한다라고 이해하겠습니다
Export template 안됨
1
45
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
70
3
main 함수에서 왜 int만 선언이 되는걸까요
1
63
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
62
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
58
1
프로토타입과 함수간의 인자 불일치
1
81
2
12.12 헤더 관련 질문
1
63
2
Visual Studio Community 2026 사용 문의
1
149
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
65
2
getchar(), putchar()
1
96
3
강의자리ㅛ
1
85
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
119
2
소스파일안에 여러 파일
1
80
2
F5와 F7의 차이
1
82
2
c = TWO * (a+b); 에서 a와 b는?
1
63
2
; 세미콜론을 붙이는 기준에 문의
1
73
1
Step over 기능 문의
1
57
2
2.6 강의 따옴표 출력 규칙 문의
1
81
2
int main 함수 관련 오류 문의
1
71
2
13.4 words[0]
0
64
2
11.7 함수를 구현해 봤습니다.
1
66
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
67
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
57
2
11.6 fit_str함수를 구현해 봤습니다.
1
56
2






