2010-12-05 5 views

답변

4

사용 fgets() 대신 scanf()

+2

이 질문에 대한 대답은 "이유"입니다. 덕분에 – caf

+0

! 그것은 – user531119

0

bookname가 기분이 언짢아는 문자의 일종이다 ;-) 점은 첫 번째 공백 문자에이 양식 정류장에서 scanf 그.

다른 형식 문자열을 사용할 수 있지만이 경우 fgets을 사용하는 것이 좋습니다.

scanf은 실제로 "형식화 된"입력에 사용해야합니다.

18

%s 변환 지정자는 scanf이 첫 번째 공백 문자에서 멈추게합니다. 당신이 공백 문자를 읽을 수 있어야합니다, 당신은 %[ 변환 지정자를 사용해야합니다 중 다음 개행 문자로 모든 것을 최대를 읽고 수 있지만, bookname에 저장됩니다

scanf("%[^\n]", bookname); 

같은

safe 변환 지정자에 bookname의 최대 길이를 지정해야합니다. 예 : bookname과는 널 (NULL) 종료를 카운트 30자를위한 공간이있는 경우, 당신은 당신이 fgets()을 사용할 수, 그렇지 않으면

scanf("%29[^\n]", bookname); 

를 작성해야 :

fgets(bookname, sizeof bookname, stdin); 

내가 개인적으로는 fgets() 솔루션을 선호합니다.

+0

매우 고마워. 좋은 정보 :) – user531119