프로그래밍/c언어

표준 입출력 함수와 문자열 함수(엔터키 무시, 외울 함수 많음) -C언어

량아이 2022. 7. 25. 20:47

짜잔! 내가 제일 싫어하는 문자열 시간☆

문자를 두개 이상 입력해야 할때

#include <stdio.h>
int main(){
    char a,b;
    scanf("%c",&a);
    scanf("%c",&b);
    printf("%c\n%c",a,b);
}

이렇게 작성해버리면 입력할때 누른 [enter]키도 아스키코드에 들어가는 '문자'이기 때문에 자동으로 b에 입력이 된다.

엔터때문에 씹힘

여기서 해결방법은 크게 두가지가 있는데 하나는

#include <stdio.h>
int main(){
    char a,b;
    scanf("%c",&a);
    scanf(" %c",&b);
    printf("%c\n%c",a,b);
}

와 같이 뒷 코드에 스페이스바로 간격을 만들어 주는 것이고

*여기서 주의할점은 scanf(" %c",&a);이렇게 작성해버리면 [엔터]a[엔터]b로 입력해야 정확히 입력이 된다.

다른 하나는 입력 사이에

scanf("%c",&a);
fflush(stdin);
scanf("%c",&b);

와같이 fflush(stdin);를 입력해주는 것이다.

 

fflush(stdin)는 이전 작업으로 버퍼에 남아있는 입력들을 없애주는건데 예를들어 문자입력에 ab와같이 초과로 입력하게 되면 b를 지워주는 거다.

 

<conio.h>

새로운 헤더파일인 <conio.h>을 사용하는 함수 _getche() 와 _getch()도 나왔지만 아쉽게도 리눅스 기반에서는 이 헤더파일을 사용할 수 없다고 한다 ㅠㅠ 맥북에서도 바이바이인걸로ㅠ

대충 뭐하는 함수인지만 짚고가자면

printf("나는 똑똑합니까? (Y/y)");
answer=_getche();

이런식으로 scanf()와 비슷하게 사용하는 함수이다.

_getche() 와 _getch()의 차이점은

_getche()은 내가 어떤걸 입력했는지 화면에 보여주고 

_getch()은 보여주지 않는다고 한다.

 

gets() 와 puts()

gets() 함수는 [enter]키가 입력되면 종료된 것으로 간주한다. scanf()처럼 사용!!

puts()은 printf()와 같지만 변수를 출력할 때 "%s"이런식으로 입력하지 않아도 되고 줄바꿈도 기본 장착돼있다.

*puts()함수는 알고리즘 1에서 처음봐서 나는 변수는 출력 불가능한줄 알았다.

#include <stdio.h>
int main(){
    char a[20];
    gets(a);
    puts(a);
}

충격과 공포의 한글출력

흠... 그렇다고 한다.

printf("%s",a); 로도 해봤지만 결과는 같았다 원래 그런갑다.

 

<stlib.h> 문자열 변환 함수

다시 새로운 헤더파일 <stlib.h>가 나왔다!

atoi() -문자열을 int형으로 변환

atol() - 문자열을 long 형으로 변환

atof() - 문자열을 float형으로 변환

이름부터 알아보기 쉬워서 좋다.

mun="12345";
mun=atoi(mun);

와 같이 사용하면 된다.

 

<string.h>

문자열을 보다 편리하게 처리할 수 있는 기능을 제공한다.

<string.h>

외울게 더럽게 많다 지금 당장 사용할 게 아니니 차차 알아보기로 하자

대충 사용법 예시만 들자면

//문자열의 길이 구하기
mun="Hello!";
printf("%d",strlen(mun));

와같이 사용하면 된다!