#include <stdio.h>
#define LEN 1000000
int main(){
char str[LEN];
scanf("%s",str);
printf("%s",str);
}
1. scanf[] scanset character
scanset character [] 를 scanf 함수에 추가해 주는 방법이다.
[^"문자"]의 의미는 해당 문자가 나오기 전 까지 모든 문자열을 받겠다는 뜻이다.
개행(엔터)를 의미하는 문자인 "\n" 를 ^뒤에 넣어주면, 개행(엔터)가 나오기 전 까지 모든 문자열을 받겠다는 뜻이 된다. 따라서, 공백도 포함해서 입력을 받을 수 있게 되는 것이다.
/* scanset character 예시 */
#include <stdio.h>
#define LEN 1000000
int main(void){
char str[LEN];
scanf("%[^\n]s",str);
printf("%s",str);
}
다른 방식으로 응용해보자
scanf("%[^abc]", str) ; a or b or c 문자가 나오기 전까지 모든 문자열을 버퍼에 저장다.
입력값 : 12345a1234
버퍼(저장)값 : 12345
scanf("%[abc]", str) ; a or b or c 문자 "이외의 값" 이 나오기 전까지 모든 문자열을 버퍼에 저장한다.
입력값 : abcabcd
버퍼(저장)값 : abcabc
scanf("%5[abc]", str) ; a or b or c 문자 "이외의 값" 이 나오기 전까지 모든 문자열을 "5자리 까지" 버퍼에 저장한다.
입력값 : aaabbbccc
버퍼(저장)값 : aaabb
2. gets
gets 함수는 기본적으로 공백을 포함해서 입력을 받고 있다. 아래 내용을 확인하시면 기본적으로 공백을 포함해서 입력 받고 있는 것이다.
#include <stdio.h>
int main(void)
{
char str[20];
printf("문자열 입력하고 Enter>");
gets(str);
printf("입력된 문자열 : %s \n", str);
return 0;
}
3. fgets
함수원형 : char* fgets(char* str, int num, FILE* pFile);
사용 예시 : fgets("문자열", 100, stdin)
함수 이름인 fgets 는 file + get + string 을 조합한 이름으로, 파일로 부터 문자열을 가지고 온다는 뜻이다.
단, scanf 함수와 달리 fgets 함수는 공백을 포함하여 문자열을 입력 받는다.
첫 번째 인자 : 문자열을 가리키는 포인터.
두 번째 인자 : 문자열의 길이를 넣는 변수.
세 번째 인자 : 파일을 가리키는 파일 포인터.
#include <stdio.h>
#define LEN 1000000
int main(void){
char str[LEN];
fgets(str,LEN,stdin);
printf("%s",str);
}
C언어 공백 포함 문자열 입력 받는 방법 #scanf 공백 포함 문자 입력 받기 #gets 공백 포함 문자 입력 받기 (tistory.com)
[C/C++] C언어 공백 문자 포함한 문자열 입력받는 방법 (scanf / fgets) (tistory.com)
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C] 재귀함수(Recursive/리쿼시브)의 개념과 공부하는 이유 (0) | 2023.09.05 |
---|---|
[C++] 공백 포함 문자열 입력받기 (0) | 2023.09.04 |
[C] 지역 변수 2차원 배열 동적 할당 및 해제 코드 (0) | 2023.09.03 |
[C] main 함수에게 return 이란? (0) | 2023.09.03 |
[C] 문자열(String) - 문자열 저장, 널문자, 문자열 배열, 문자열 크기 (0) | 2023.08.31 |