3/16 TIL
문자열 예제
- 문장을 입력받아서(최대 n자) 글자 수를 세는 예제 프로그램 만들기, n자를 넘어서면 n자를 출력하고 뒤에는 무시.
-
scanf(”%s”) : scanf는 단어 단위로 입력을 받기 때문에 띄어쓰기가 포함된 문장은 원하는 답을 출력하지 못함
-
gets : 우리가 원하는대로 답을 얻을 수 있지만 gets는 안전하지 않기 때문에 사용을 지양 (버퍼사이즈를 작게 할당해도 지가 마음대로 할당해서 씀)
-
fgets : 버퍼사이즈를 함수안에 직접 설정하기때문에 gets에 비해 안전함. fgets(buffer, BUFFER_SIZE, stdin) 처럼 버퍼사이즈를 직접 설정해놓기 때문에 버퍼의 크기를 초과하는 일이 없음.
하지만 줄바꿈 문자(\n)까지 같이 저장해버리기 때문에 줄바꿈이 같이 출력되고 문자열 크기+1 되는 문제가 발생함. 해결방법으로는 마지막 문자를 NULL값으로 바꿔주면 됨. 근데 이러면 우리가 설정해놓은 버퍼사이즈를 초과하게 되면 여러 줄이 출력되서 원하는 답이 아님.
-
직접 함수 만들어서 쓰기 : 그냥 직접 만들어서 쓰면 됨..ㅋ
int read_line(char str[], int buffer){ int ch, i = 0; while((ch = getchar()) != '\n') { if (i<buffer) str[i++] = ch; str[i] = '\0'; } printf("%s", str); return i; }
-
-
getchar()란 입력받은 버퍼의 첫 문자를 반환하는 함수이다. 버퍼는 문자를 저장하는 스택이다.
int i; char ch; scanf("정수 : %d", &i); printf("정수 : %d", i); getchar(); ch = getchar(); printf("문자 : %c", ch);
3번째 줄에서 6을 입력했다고 치자. 그러면 6을 치고 엔터를 눌렀기 때문에 현재 버퍼에는 [6, \n]이 있다. 그리고 4번째 줄에서 6을 써버렸기 때문에 버퍼에는 [\n]이 남아있다. 만약 이 상태에서 다섯번째 줄에 있는 getchar()를 하지않고, 즉 버퍼에 남아있는 개행문자를 반환시키지 않고 바로 여섯번째 줄로 넘어갈 경우 ch에는 개행문자가 들어가게 되어 바로 프로그램이 끝나게 된다.
-
문자열을 입력받아 의미없는 공백을 삭제하여 출력하는 프로그램 만들기. 즉 맨 앞의 공백과 맨 뒤의 공백은 아예 없애버리고 문자 중간에 있는 2개 이상의 공백은 하나의 공백으로 줄이면 됨.
while((ch = getchar()) != '\n'){ if((i==0 && ch == ' ') || (ch == ' ' && str[i-1] == ' ')) continue; str[i++] = ch; } if(i>0 && str[i-1] == ' ') i--; str[i] = '\0'; printf("%s\n", str);
하루를 마치며
진짜 요새 일하느라 너무 힘들다.. 5월에 유럽여행 가려고 비행기표, 숙박을 예약해놨다. 이제는 빼도박도 못하니 남은 경비를 모으려고 죽도록 일하는 중이다..ㅠㅠ 이 속도로 공부하다가는 플러터는 커녕 자료구조도 다 못끝내고 복학하게 생겼다. 제발..열심히 하자..제발!!!!
Author And Source
이 문제에 관하여(3/16 TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nmh369/316-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)