나무 숲
[C] 띄어쓰기/공백 포함한 문자열 입력받기 본문
scanf("%s", str) ..... 는 적합하지 않다.
"%s" 는 whitespace(공백) 전까지의 문자열만 입력받기 때문이다.
1 fgets
gets()도 있긴 하지만 지양하는 편이 좋다고 한다.
왜냐면! gets는 입력받는 문자열의 길이를 모르기 때문에 버퍼를 초과하여 char들을 저장할 수 있는데 이것은 위험하고.. 아무튼 뭐 하나라도 찝찝하면 안써야 뒤탈이 없다고 한다.
공백을 포함한 문자열 = line을 읽고 싶다면 gets 대신 fgets()를 사용한다.
fgets (str, 100, stdin);
에서 알 수 있듯이 fgets의 매개변수로는 문자열이 저장되는 곳, 입력받는(stdin) 문자열의 최대길이(100)가 포함된다.
2 scanf []
scanf ("%[^\n]%*c", str);
scanf("%[^\n]s",str);
[]는 scanset character라고 한다. [^\n]라는 뜻은, input입력 값으로 개행(\n)을 받기 전까지 계속 입력받는다는 것을 뜻한다.
그 외~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
scanf("%[^123]s", str);
일 때, 1 또는 2 또는 3이 나오기 전까지의 모든 문자를 버퍼에 저장.
입력 :aa2aaa --> 버퍼 :aa
scanf("%[123]s", str);
일 때, (1 또는 2 또는 3)이외의 문자가 나오기 전까지의 모든 문자를 버퍼에 저장. 123의 경우 1-3으로도 표현 가능. 0~9도 마찬가지로 0-9.
[1-37-9] 식으로 1~3 and 7~9범위 지정 가능
입력 :22a222 --> 버퍼 :22
scanf("%5[123]s", str);
일 때, (1 또는 2 또는 3)이외의 문자가 나오기 전까지의 모든 문자를 버퍼에 저장하는데, 5자리까지만 저장
입력 :2222222222 --> 버퍼 :22222
scanf(" %[123]s", str);
일 때, (1 또는 2 또는 3)이외의 문자가 나오기 전까지의 모든 문자를 버퍼에 저장하는데, %[123]앞에 띄어쓰기가 있다. 인풋 문자열의 시작에 들어오는 공백은 모두 무시한다는 뜻이다.
입력 : 111 --> 버퍼 :111
'Career > 알고리즘 · 자료구조' 카테고리의 다른 글
[C++] 띄어쓰기/공백 포함한 문자열 입력받기 (0) | 2017.03.09 |
---|---|
[C++] bool 출력 - boolalpha (0) | 2017.02.08 |
에라토스테네스의 체 Sieve of Eratosthenes (0) | 2017.02.02 |
[C++ STL] #include<deque> (0) | 2017.01.10 |
[C++ STL] #include<queue> (0) | 2017.01.09 |