본문 바로가기
카테고리 없음

C언어 기본] 03 변수와 데이터 입력

by redcubes 2024. 3. 9.

목차

변수

데이터 입력

 

A. 변수

변수선언은 메모리에 저장 공간을 확보하는 것. 정수: int 실수: double 문자: char 문자열: char

 

____1. 선언방법

자료형 변수명; //초기에 가비지 값이 들어있음.
변수명 = 값 //초기화

- 선언 대입 규칙

  1. 중괄호 블록 안에 선언. 선언 후 블록 끝까지 사용 가능
  2. 자료형 같으면 동시 선언 가능
  3. 대입 연산자는 연산자 왼쪽 변수에 오른쪽 값 저장
  4. 변수는 대입연산자 왼쪽에서 저장소(메모리주소의 별칭) 오른쪽에서는 밸류

 

____2. 타입

정수형 실수형

정수형 byte 범위: -2^(비트수-1)  ~  2^(비트수-1)-1  
char 1               ASCII값 %c: 문자출력 %d: 정수출력
short 2             연산과정에서 int변환
int 4         가장 빠르고 일반적
long 4         큰 값 저장
long long 8 메모리 낭비가 큼

*컴파일러에 따라 각 자료형 크기가 다를 수 있으나 다음 규칙은 유지

char ≤ short ≤ int ≤ long ≤ long long

컴파일러가 구현한 자료형 크기 확인하기

print("%d", sizeof(long long));

- unsigned int: 양수 전용 출력시 %u  사용해야 바른 값 출력

#include <stdio.h>

int main(void)
{
    for (int i = -10 ; i <= 10; i++) {
        printf("%d, ", i);
        printf("%u\n", i);
    }

    return 0;
}
-10, 4294967286
-9, 4294967287
-8, 4294967288
-7, 4294967289
-6, 4294967290
-5, 4294967291
-4, 4294967292
-3, 4294967293
-2, 4294967294
-1, 4294967295 // 11111111 11111111 11111111 11111111
0, 0
1, 1
2, 2
3, 3
4, 4
5, 5
6, 6
7, 7
8, 8
9, 9
10, 10
실수형 byte 범위: -2^(비트수-1)  ~  2^(비트수-1)-1
유효숫자
float 4                 7
double 8   15
long double 8 이상         15이상
  1. 정수형을 기본으로 사용하고 꼭 필요한 경우에만 실수형 사용
  2. 실수형은 double 형을 기본으로 사용
  3. long double은 gcc에서는 16바이트 vc++컴파일러에서는 8바이트(코드 호환성 보장안됨.)
  4. float 사용할 때는 1.23f(또는 1.23F)처럼 4바이트 크기 상수로 저장할 값 지정

- 문자열: char 배열로 저장. 문자열의 길이보다 1 이상 길어야 함(컴파일러가 문자열 끝에 \0 Null추가함). %s

char fruit[6] = "apple";

*초기화 이외에 문자열을 저장항 때는 strcpy함수 사용 <string.h>, #define _CRT_SECURE_NOWARNINGS

- const: 선언과 동시에 초기화(안하면 가비지값 고정)

____3. 예약어 식별자

- 예약어: 컴파일러 예약된 단어

- 식별자: 사용자 지정-
규칙: 대소문자(*서로 구분됨) 숫자(*첫 글자는 안됨.) 언더라인. 예약어 사용 불가능

출처: https://hijjang2.tistory.com/m/359

 

[C] C언어 변수,예약어 종류

-예약어- *예약어 = 정해진 기능을 수행하도록 이미 용도가 정해져 있는 단어 -정의- *단정도 / 배정도 -> float자료형은 '단정도형', double, long double 자료형은 '배정도형'이다 -틀린거 고친거-

hijjang2.tistory.com


연습문제

#include <stdio.h>

int main(void)
{
    int kor, eng, math, total; // 세과목과 총점 저장할 변수 선언
    kor = 70; //국어 점수 초기화
    eng = 80; //영어 점수 초기화
    math = 90; //수학 점수 초기화

    total = kor + eng + math; // 총점 계산
    printf( "국어 : %d, 영어 : %d, 수학 : %d\n", kor, eng, math);
    printf( "총점 : %d\n", total);
    
    return 0;
국어 : 70, 영어 : 80, 수학 : 90
총점 : 240

B. 데이터 입력

본문내용 삽입

 

____1. scanf

- 사용법

scanf("%d", &a);
scanf("%d%lf",&a,&b); //빈 칸(혹은 탭, 엔터)으로 구분해 입력받음
  • 메모리에 직접 엑세스하기 때문에 보안 문제 #define _CRT_SECURE_NOWARNINGS 첫줄 추가하고 컴파일해야 함.
  • &: 변수명의 주소를 구하는 연산자. 스캔에프는 메모리~주소에 ~형식으로 써 라는 함수 
  • 입력 형식이 맞지 않으면 함수가 실행 중단, 메모리의 이전 값이 계속 사용.

____2. 문자와 문자열 입력

- 문자열: char형 변수에 문자를 입력할 때는 공백 개행 모두 하나의 문자로 전달됨. 문자열 중간에 스페이스 엔터 탭을 만나면 바로 전까지만 저장됨. 문자열 저장할 때는 &안씀(배열)

#include <stdio.h>

int main(void)
{
    char grade;
    char name[20];
    
    printf("학점 입력:");
    scanf("%c", &grade);
    printf("이름 입력:");
    scanf("%s", name);
    printf("%s의 학점은 %c입니다.\n", name, grade);

    
    
    return 0;
}
*정상입력 시

학점 입력:A
이름 입력:홍길동          
홍길동의 학점은 A입니다.

____3. 비정상 종료

\사용시 한 번의 입력으로 다음 입력까지 되어버림

학점 입력:\0
이름 입력:0의 학점은 \입니다.
학점 입력:\\
이름 입력:\의 학점은 \입니다.

이름 길이 초과시(학점은 엔터키) 에러

학점 입력:
이름 입력:11111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111의 학점은 
입니다.

한글은 한 자당 2바이트, 9자까지 입력 가능. scanf_s는 잘라먹음. 메모리 침범 문제를 일으키는 함수는 gets도 있음.

%d로 받아서 char 주소에 입력하면 1바이트 메모리에 4바이트를 쓰면서 메모리 침범.

short 형은 %hd로 받아야 함.

 

연습문제

#include <stdio.h>

int main(void)
{
    char ch;
    
    printf("문자 입력:");
    scanf("%c", &ch);
    printf("%c문자의 ASCII코드 값은 %d입니다.\n", ch, ch);
    
    return 0;
}
문자 입력:A
A문자의 ASCII코드 값은 65입니다.