2014-11-15 3 views
1

scanf을 두 번 사용하여 문자열을 스캔 한 다음 char을 스캔했습니다. 문자열을 먼저 검색하고 두 번째 문자는 실행하지 않습니다 scanf. 내가 %s%c을 하나만 사용하면 scanf이 완벽하게 작동합니다. 왜 이런 일이 일어 났는지 말해 줄 수 있어요?문자열 스캔을 위해 scanf를 두 번 사용할 수없고 문자를 스캔하지 못했습니다.

#include<stdio.h> 
int main() 
{ 
char s[100],ch; 
scanf("%s %c",s,&ch); //this works! 
printf("%s %c",s,ch); 
return 0; 
} 
+1

에 의해 촬영되고 읽은 후 개행 문자가있다 "작동하지 않습니다"무슨 일이 일어나고있는 우리에게 설명하지 않습니다. 당신은 무엇을 기대 했습니까? 실제로 무슨 일이 있었습니까? 문제를 이해하고 시도하기 위해 무엇을 했습니까? 프로그램과 함께 디버거를 사용할 때 어떤 일이 발생 했습니까? – AdrianHHH

+1

첫 번째 옵션에서는 두 번째'scanf '바로 다음에 중단 점을 넣고'ch' 값을 확인하십시오. 대부분 첫 번째'scanf'에서 개행 문자입니다. 코드를 디버깅하는 방법을 배우지 않아도 나중에 도움이 될 것입니다. –

+0

참고 : 알몸''% s "'을 사용하지 마십시오. 여기서 "% 99s"를 사용하는 것이 더 좋습니다. – chux

답변

3

작동

#include<stdio.h> 
int main() 
{ 
char s[100],ch; 
scanf("%s",s); 
scanf("%c",&ch); //this does not work 
printf("%s %c",s,ch); 
return 0; 
} 

다른 프로그램은 scanf()%c 전에 공백을 추가하십시오.

문자열 그래서이 %c

#include<stdio.h> 
int main() 
{ 
char s[100],ch; 
scanf("%s",s); 
scanf(" %c",&ch); 
printf("%s %c",s,ch); 
return 0; 
} 
+0

scanf에서 남아있는 개행 문자를 지우는 또 다른 논리적으로 더 명백한 (IMO) 방법은 입력을위한 포맷터 다음에 % * c를 추가하는 것입니다. 따라서'scanf ("% s % * c", s); '위의 단편에서; 다음 scanf 호출이 버퍼에 남아있는 개행 문자를 읽지 않도록 버퍼를 지 웁니다. 형식 항목에서 * after %는 scanf에 모든 형식의 스캔 된 값을 버리도록 지시합니다. –