2014-11-21 3 views
-3

C 프로그래밍 중에 문자열이 성공적으로 스캔 된 후 문자를 검색하지 않습니다.왜 % c 문자를 스캔 할 수 없습니까?

char s[10],c; 
scanf("%s",s); 
scanf("%c",&c); 
printf("%s\n",s); 
printf("%c",c); 
+4

어떻게됩니까? 너는 무엇을 기대 하느냐? 대신에 당신은 무엇을 보나요? 어떤 종류의 대답을 기대합니까? – glglgl

+1

이 질문은 매일 묻고, 초보자에게주는 문제의 양을 고려해 볼 때 심각하게 받아 들여야합니다. 적어도 제공하고 대답하거나 가까운 투표를하십시오. – 2501

+0

아마도 컴파일러는 작성한 것을 좋아하지 않았습니다. 그래서 스캔하지 않았습니다. – barnes

답변

4

scanf 수동 :

지정자 C :

길이 최대 필드 폭 (설정치 1)에 의해 지정된 문자의 순서에 일치되며 다음 포인터는 char에 대한 포인터 여야하고 모든 문자에 대해 충분한 공간이 있어야합니다 (종료 null 없음 바이트가 추가됨). 일반적인 공백 건너 뛰기가 억제됩니다. 먼저 공백을 건너 뛰고 형식에서 명시적인 공백을 사용하십시오.

따라서 형식을 " %c"으로 변경하십시오. 의도 한대로

1

char s[10],c; 
scanf("%s",s); 
scanf("%c",&c); 
printf("%s\n",s); 
printf("%c",c); 

은 작동하지 않습니다 때문에 당신이 사용할 때 scanf("%s",s); 그런 다음 키보드에서 문자열을 입력 Enter 키를 누릅니다 것이다. 즉, scanf("%s",s);은 버퍼에서 s에 문자열을 저장하지만, 버퍼에 이상, 정확하게는 \n이됩니다. 다음 scanf("%c",&c);은 길이가 1 문자이고 c에 저장되므로 \n으로 표시됩니다. 그러나 당신이 그것을 인쇄 할 때 그것이 단지 새로운 줄이기 때문에 아무것도 보지 못할 것입니다. 이 모든 변경을 막으려면 두 번째 scanf("%c",&c);scanf(" %c",&c);으로두고 \n을위한 공간을 남겨 둡니다.

희망이 있으면 상황을 이해하는 데 도움이됩니다.

+1

"인쇄 할 때 새로운 줄이므로 아무것도 표시되지 않습니다."- OP는 아무 것도 볼 수 없으며 OP는 새로운 줄을 보게됩니다. – zoska

0

문자열 '에 대한 문자를 입력 한 후'\ n '을 입력하면 다음 문자 스캔이 새 줄을 캡처하고 인쇄합니다. 당신이 할 수있는 일은 새로운 줄 '\ n'을 잡는 것입니다. scanf ("% c", & c)를 입력하십시오. 한 번 더 작동합니다.

char s[10],c; 
`scanf("%s",s);` 
`scanf("%c",&c);` 
`scanf("%c",&c)` 
`printf("%s\n",s);` 
`printf("%c",c);` 
관련 문제