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 가 문자열 내용 을 연속 으로 입력 하 는 것 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.