sdy9103   6년 전

. 최대 100 행까지 입력 받을수있다고 되어있는데, 입력이 끝난지는 어떻게 알죠?

3행만 입력하고 입력이 끝인지 아닌지는..어떻게 판단하나요?

gallopsys   6년 전

C에서 표준 입력 함수들을 공부하다 보면 쉽게 아실 수 있는 내용인데, scanf의 경우 문자열을 입력받을 때, 인수가 제대로 들어오지 않은 경우, EOR (int형으로 -1)을 반환하게 됩니다.

다른 문자열 입력 함수도 마찬가지로 gets나 fgets는 NULL을 반환하게 되며, 이를 이용해서 입력을 제한할 수도 있겠죠...?

sdy9103   6년 전

무슨말인지 이해가 잘안됩니다ㅠㅠ

죄송한데 소스코드 같은걸로 예시로 설명해주시면안될까요??ㅠㅠㅠ

gallopsys   6년 전

늦어서 죄송합니다 ㅠㅜ 퇴근하고 오다보니... 주로 C로 제출하시니 예제로 설명해드릴게요. 자세한 내용은 주석으로 첨부를 해두도록 하겠습니다...!


원래 저는 scanf로 이 문제를 푸는 편인데, scanf를 쓰려면 scanset이라는 형식 문자열을 써야하고, 이해하기엔 아직 어려울 수 있으므로 fgets를 사용하여 소개해드렸습니다...

모르시는 거 있으면 더 물어보세요!


또 이것도 물어보실까봐 미리 말해두는 건데, 비주얼 스튜디오나 콘솔 창에서 입력을 해도 막 입력이 안 끝난다, 프로그램을 어떻게 종료시켜야 되냐 라는 질문을 되게 많이 하시거든요. 윈도우에서는 Ctrl + Z, 리눅스에서는 Ctrl + D를 누르면 입력을 종료하게 되니 참고로 알아두시길 바랍니다.

sdy9103   6년 전

안녕하세요 ! 자세한 답변 감사드립니다ㅠㅠ

#include <stdio.h>

int main(void) {  char str[12] = "";

 while (fgets(str, 12, stdin)) {   printf("%s", str);  } }

이 코드 작성하여 12 문자 이상 입력해보았는데요...

그런데 12문자 이상 입력해도 그대로 출력되더라구요

제가 예상한건11문자만 출력되는거였는데....

혹시 왜그런지 알수있을까요???ㅠㅠ

gallopsys   6년 전

while로 돌리셨잖아요? 그럼 끝날 때까지 계속 돌 수 밖에요. 11문자만 출력되도록 하시려면 while이 아니라 if를 쓰셨어야죠.


물론 저 문제에서 if문만 써서는 어디까지 입력이 들어올지 알 수가 없기 때문에 그렇게 풀면 안 됩니다...

댓글을 작성하려면 로그인해야 합니다.