문자열 처리에서여... 입력이 안되네요

yc307의 이미지

소스 코드는 다음과 같습니다.

===============================================

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *compression(char *);

main()
{
char cue;
printf("압축(Compression), 종료(Exit) ?");
scanf("%c",&cue);
char message[100];
int len;


if (cue == 'c' || cue == 'C')
{
printf("압축할 문자열 >>> ");
fgets(message, sizeof(message), stdin);
len = strlen(message);
message[len-1] = '\0';
printf("\n압축된 문자열 >>> %s",compression(message));
}

==============================================

compression 이란 함수는 만들었는데요...

fgets함수를 써서 키보드로 입력을 받으려고 했는데 입력을 기다리지 않고

바로 다음 단계로 넘어가 버리네요...

저거랑 거의 똑같이 해서 다른 프로그램은 만들었는데... 왜 이건 안되는지 도무

지 모르겠어요.....

참고로 gcc 컴파일러 쓰구요 에러는 나지 않습니다.

고수님들 한 수 부탁드립니다.

wind772의 이미지

scanf()로 받을때 '\n' 을 처리해주지 않는다고 알고 있습니다..^^;;
즉, 버퍼에 남아서 다음 입력 fgets() 때 입력되겠죠..^^
저도 한동안 저것때문에 머리를 싸맸다는...흑..ㅠㅠ

===================================================
중요한건 얼마나 아느냐가 아니라 그것에 대한 열정이다.

yc307의 이미지

scanf가 그랬군요...

지금 막 fgets으로 캐릭터를 받아서 하니깐 되네요...

근데 scanf 로 해결하는 방법은 없을까요?? 궁금하네요...

맹고이의 이미지

scanf 관련된 비슷한 스레드 많이 있을겁니다
검색 해보세요 8)

http://bbs.kldp.org/viewtopic.php?t=400&highlight=scanf

nahanjang의 이미지

fget 하기 전에 버퍼를 비우면 ...
int fflush(FILE *stream);

cdpark의 이미지

nahanjang wrote:
fget 하기 전에 버퍼를 비우면 ...
int fflush(FILE *stream);

입력 stream에 대한 fflush의 행동은 정의되어 있지 않습니다.

nahanjang의 이미지

"입력 stream에 대한 fflush의 행동은 정의되어 있지 않습니다"

잘 모르겠지만

fflush(stdin);

을 하면 정상적인 입력을 할 수가 있더라구요.
다른 문제가 있는건 모르겠지만...