C 언어 에서 scanf 를 사용 하여 문자열 을 연속 으로 입력 하 는 문제


#include<stdio.h>
 
int main()
{
	char a,b;
	scanf("%c",&a);
	scanf("%c",&b);
	printf("%c,%c",a,b);
}
C 언어 초보 자 라 도 알 아 볼 수 있 는 간단 해 보 이 는 코드
그런데 운행 중 에 문제 가 생 겼 어 요.
① a 입력 후 리 턴 을 누른다
在这里插入图片描述
② 스페이스 바 로 분리 한 후 리 턴 을 누른다
在这里插入图片描述
나 와 같은 대부분의 초보 자 들 이 자신의 흠 잡 을 데 없 는 코드 를 보면 아무리 생각해 도 이해 할 수 없다 고 믿는다.
바 이 두 백과 에서 scanf 함수 에 대한 설명 을 먼저 살 펴 보 겠 습 니 다.
在这里插入图片描述
① 에서 우 리 는 a 와 리 턴 만 입력 했다.이때 리 턴 은 버퍼 에 남아 다음 scanf 에 흡수 되 었 다.② 에서 a,빈 칸,b 와 리 턴 을 입력 했 습 니 다.이런 상황 에서 우리 가 입력 한 빈 칸 은 버퍼 에 들 어가 b 를 읽 을 수 없 게 되 어 문제 가 발생 했 습 니 다.
해결 방법
① 두 번 째%c 앞 에 빈 칸 을 추가 하여 이전에 입력 한 빈 칸/리 턴 을 상쇄 합 니 다.

#include<stdio.h>
 
int main()
{
	char a,b;
	scanf("%c",&a);
	scanf(" %c",&b);	// %c       
	printf("%c,%c",a,b);
}
② 첫 번 째%c 뒤에*c 를 추가 하고 다음 읽 을 문 자 를 무시 합 니 다.

#include<stdio.h>
 
int main()
{
	char a,b;
	scanf("%c*c",&a);
	scanf("%c",&b);
	printf("%c,%c",a,b);
}
③ 버퍼 를 fflush 로 비 웁 니 다.

#include<stdio.h>
 
int main()
{
	char a,b;
	scanf("%c",&a);
	fflush(stdin); 
	scanf("%c",&b);
	printf("%c,%c",a,b);
}
④ getchar 로 문자 흡수

#include<stdio.h>
 
int main()
{
	char a,b;
	scanf("%c",&a);
	getchar();
	scanf("%c",&b);
	printf("%c,%c",a,b);
}
방법 ① 을 제외 하고 다른 세 가지 방법 은 scanf 를 사용 할 때 만 효과 가 있 을 뿐만 아니 라 getchar 를 사용 하여 유사 한 문제 에 부 딪 혔 을 때 도 효과 가 있 으 며 관심 있 는 독자 들 은 스스로 시도 할 수 있다.
C 언어 에서 scanf 를 사용 하여 문자열 을 연속 으로 입력 하 는 문제 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 scanf 가 문자열 내용 을 연속 으로 입력 하 는 것 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기