나무 숲

[C] 띄어쓰기/공백 포함한 문자열 입력받기 본문

Career/알고리즘 · 자료구조

[C] 띄어쓰기/공백 포함한 문자열 입력받기

wood.forest 2017. 2. 7. 00:01

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


728x90
반응형
Comments