컴퓨터를 공부하고자 마음먹은지 N일차

[8일차](홍정모의따배c)문자열과 형식 맞춘 입출력2 본문

🖥C

[8일차](홍정모의따배c)문자열과 형식 맞춘 입출력2

졸린새 2020. 9. 15. 17:27
728x90

[8일차](홍정모의따배c)문자열과 형식 맞춘 입출력

*본 강의수기는 교수님의 모든 ppt나 코드 화면을 붙인게 아닙니다. 따로 출처 표시나 과제표시

안한 모든 코드와 사진자료의 출처는 본 강의의 교수님 입니다.

정리는 다시한번 제가 보기위함과 어떤강의인지 알려드리는 것이고

제가 적은건 이해를 돕기 위한 부연설명과 제가 이해한 몇개의 중심적인 내용이 다소

생략이 되었습니다. 이 수기를 통해 공부하려 하지말고 흥미로운 내용이라면

'인프런- 홍정모의 따라하며 배우는c' 과정을 수강하시길 바랍니다.

printf()함수의 변환지정자들

#include <stdio.h>
#include <limits.h>
#include <float.h>


int main()
{
    double d = 3.141592653589793238462643383279;
    
    printf("%c\n", 'A');
    printf("%s", "I love you\n");
    printf("Even if there's a small chance, \
we owe this to everyone who's not in this room to try.\n"); 
// '\'  입력하면 한라인 띄울 수 있다
    
    printf("\n");
    printf("%d %i %i %i\n", 1004, 1234, INT_MAX, UINT_MAX); 
//i자리에 언사인드 인트를끼워넣으니 스택오버플로우가 발생해 -1이 나왔다.
    printf("%u %u %u\n", 1024, -1, UINT_MAX); 
//언사인드인트 자리에 음의정수를 넣으니 스택오버플로우가
// 발생해 4294967295가 나왔다.
    
    printf("\n");
    printf("%f %f %lf\n", 3.141592f, d, d); //lf는 무시되었다.
    printf("%a %A\n", d, d);
    printf("%e %E\n", d, d);
    
    printf("\n");
    printf("%g %g\n", 123456.789, 1234567.89);
    printf("%G %G\n", 123456.789, 1234567.89);
    printf("%g %g\n", 0.00012345, 0.000012345);
    printf("%G %G\n", 0.00012345, 0.000012345);
    
    printf("\n");
    printf("%o\n", 9);
    printf("%p\n", &d);
    
    printf("\n");
    printf("%9d\n", 12345); //출력할 때 최소 9글자 써라
    printf("%09d\n", 12345);// 출력할때 9칸을쓰고 빈칸을 0으로 써라
    printf("%.2f\n", 3.141592);//소수점이하자리를 2자리 출력
    printf("%.20f %.201f\n", d, d);//담지못하는건 뒤에 잘려나가지만
// gcc는 가능
    
    printf("\n");
    int n_printed = printf("Counting!");
    printf("%u\n", n_printed);
    
    
    return 0;
}

변환지정자의 수식어들

#include <stdio.h>
#include <limits.h>

int main()
{
    printf("%10i\n", 1234567); //10자리 출력하고 남는 앞칸 공백
    printf("%-10i\n", 1234567); //10자리 출력하고 남는 뒷칸 공백
    printf("%+i %+i\n", 123, -123); //양의정수라도 앞에 +붙이기 
//음의정수는 -그대로 붙이기
    printf("% i \n&% i\n", 123, -123);
    //한칸띄우고 출력하기 음의정수면 공백자리에 - 부호붙이기
    printf("%X\n", 17); //16진수로 표현
    printf("%#X\n", 17); //앞에부호붙은 16진수로 표현
    printf("%05i\n", 123); //5자까지표현하고 앞쪽남는 수에 0붙이기
    printf("%*i\n", 7, 456);//*에 첫번째 수대입한만큼 자릿수 출력하기

    printf("\nPrecision\n");
    printf("%.3d\n", 1024); //세자리수 출력하고 자릿수 넘어가도 그대로 출력
    printf("%.5d\n", 1024);// 다섯자리 출력하고 앞에 수 남으면 0으로 채우기
    printf("%.3f\n", 123456.1234567);//소수점 세자리수 까지 표시하고 
        //끝에 반올림
    printf("%.3f\n", 123456.1235); //소수점 세자리 출력하고 끝에
    // 반올림
    printf("%10.3f\n", 123.45678);//총 10자리 출력하고 소수점은
   // 세자리수 출력
    printf("%010.3f\n", 123.45678);//총열자리 출력 소수점 세자리 출력 앞에 남는칸 0으로 출력
    printf("%.5s\n", "ABCDEFGHIJKLMN");//5자배열까지 출력
    printf("%.s\n", "ABCDEFGHIJKLMN");//.에 숫자안붙으면
// 0자리로 취급함
    
    printf("\nlength\n");
    printf("%hhd %hd %d\n", 257, 257, 257); //hhd에서 오버플로우
    printf("%d %lld %lld\n", INT_MAX + 1,\
 INT_MAX + 1, INT_MAX + 1);
    
    return 0;
}

printf()함수가 인자들을 해석하는 과정

타입이 맞는인수가 올바른 메모리 스택에 들어가 출력된다.

#include <stdio.h>

int main()
{
    float   n1 = 3.14; //4bytes
    double  n2 = 1.234;//8bytes
    int     n3 = 1024; //4bytes
    
    printf("%f %f %d\n\n", n1, n2, n3);
    //정상출력
    
    printf("%d %d %d\n\n", n1, n2, n3);//4, 4, 4 메모리가 안맞다
    printf("%lld %lld %d\n\n", n1, n2, n3);//8, 8, 4메모리안맞고 
//타입도 세번째만 타입이 맞다
    printf("%f %d %d\n\n", n1, n2, n3);//8, 4, 4 n1제대로 출력
// n3출력
    printf("%f %lld %d\n\n", n1, n2, n3);//8, 8, 4 n1,n3출력
    
    
    return 0;
}

scanf()함수의 사용법

#include <stdio.h>
#include <inttypes.h>// intmax_t

int main()
{
    int i;
    float f;
    char str[30];
    scanf("%d %f %s", &i, &f, str);
    //배열앞엔 &안붙인다.
    printf("%d %f %s\n", i, f, str);
    //공백을 끝난입력이라 인식하여 im sleepybird
    //라 했을때 im까지만 나온다.
    
    
    return 0;
}

#include <stdio.h>

int main()

{

		char c;
    scanf("%c", &c);
    printf("%i\n", c); //아스키코드를 뱉는다 공백을 넣어도
// 공백에 해당하는 코드를 내뱉는다.

		return 0;
}

#include <stdio.h>

int main()
{

unsigned i; //분명 unsigned인데
    scanf("%i", &i); //받은걸 언사인드 메모리로
    //담아놨다가  다시 사인드로 꺼내기 때문에
    printf("%i\n", i);// 네거티브숫자를 넣어도
    //잘나온다
		

		return 0;
}

#include <stdio.h>

int main()

{

		unsigned i2; //원래 언사인드라 음수를 못받는다
    scanf("%u", &i2); //그래서 음수를 넣었을때
    printf("%u\n", i2);//오버플로우가 발생함

		return 0;
}

#include <stdio.h>

int main()

{
		double d = 0.0;
    scanf("%lf", &d); //l을 제거하면
    //메모리가 안맞아 오버플로우 발생
    printf("%f\n", d);

		return 0;
}

#include <stdio.h>

int main()

{

		char i;
    scanf("%hhd", &i);//큰숫자를 입력하면
    printf("%i\n", i);//오버플로우 발생

		return 0;
}

#include <stdio.h>

int main()

{
		int i; //정수로 담고있고
    scanf("%i", &i);//정수로 입력하기에
    printf("%i\n", i);//123a같은 문자가나오면
    //123까지 출력하고 멈춘다.

		return 0;
}

#include <stdio.h>
#include <inttypes.h> //intmax_가 있는곳

int main()

{
		intmax_t i; //intmax_t타입형에는
    scanf("%ji", &i);//j라는 수식어가 입력과
    printf("%ji", i);//출력에 둘다 붙는다.

		
	
		return 0;

}

#include <stdio.h>


int main()

{

		int a, b;
    scanf("%d,%d", &a, &b);//두 숫자 가운데
    //쉼표를 넣어야 한다
    //쉼표대신 공백을 넣으면 오류남
    printf("%d %d\n", a, b);


		return 0;

}

#include <stdio.h>


int main()

{

		int a, b;
    char c;
    scanf("%d%c%d", &a, &c, &b);//123
    //공백 456을 넣어보자
    printf("%d|%c|%d", a, c, b);
    //바 가운데 공백이 들어간다

		return 0;
}

#include <stdio.h>

int main()

{

		int a, b, c;
    int i = scanf("%d%d%d", &a, &b, &c);
    //scanf한 값을 i로 반환시켜 숫자의갯수를
    printf("%d", i);// i로 출력시킬 수 있다.
    //나오는 값은 3

		return 0;
}

#include <stdio.h>

int main()

{

		int i = 123;
    int width = 5;
    printf("Input width : ");
    scanf("%d", &width);//총 몇칸 사용할 지
    //입력
    printf("%*d\n", width, i);
    //width값이 *로 간다.
    
    return 0;

}

#include <stdio.h>

int main()

{		

		int i;
    scanf("%*d%*d%d", &i);
    //*는 %와 변수사이 넣어 그값을 무시하는 기능도
    //있다
    printf("Your third input = %d", i);
    //두번 무시하고 세번째 입력한 값을 받는다.
    
    return 0;

}
Comments