• 검색 결과가 없습니다.

키보드로 값을 입력 받아 지정한 변수에 저장함 scanf( “%d”, &i );

N/A
N/A
Protected

Academic year: 2022

Share "키보드로 값을 입력 받아 지정한 변수에 저장함 scanf( “%d”, &i );"

Copied!
28
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

5. 표준 입력 : scanf

(2)

scanf의 기본 사용법

키보드로 값을 입력 받아 지정한 변수에 저장함 scanf( “%d”, &i );

– 키보드로 정수를 입력 받아, i 변수에 저장함

scanf( “%d %d”, &i, &j );

– 키보드로 정수 두 개를 입력 받아, 각각 i, j 변수에 저장함

scanf( “%d %f”, &i, &f );

– 키보드로 정수와 실수를 각각 입력 받아, 정수형 변수 i, 실수형 변수 f 에 저장함

강C프로그래밍 2

변수 앞에 &를 붙이는 것이 중요하다.

(3)

scanf의 서식 문자

서식 문자와 변수의 자료형이 일치해야 한다.

서식 문자 입력 형태 중요도(빈도)

%d int형 정수

%u 부호 없는 정수

%o 8진수

%x 16진수

%f float형 실수

%e, %E 지수 형태로 표시되는 실수

%g, %G %f와 %e 중 간단한 쪽

%c 문자 (ASCII Code의 문자)

%s 문자열 (연속된 문자)

%p 포인터 주소 값

(4)

scanf의 특성

원하는 형태의 자료가 입력될 때까지 기다린다.

– scanf(“%d %f %d”, &kor, &ave, &mat); 는 세 개의 변수가 입 력될 때까지 기다린다.

– 잘못된 데이터가 들어와도 별도의 처리를 하지 않는다.

엔터키, 공백 문자는 모두 생략한다.

잘못된 서식 문자, 변수의 개수, 변수의 자료형의 오류는 컴파일시 지적하지 않는다.

서식과 변수의 자료형이 맞지 않으면 엉뚱한 값이 들어가 거나 입력이 무시된다.

강C프로그래밍 4

(5)

scanf 의 특성

(1)

(2)

// 잘못된 서식 문자 int i;

float f;

scanf(“%f %f”, &i, &f );

printf(“%d %f\n”, i, f );

// 문자와 숫자의 이해 %c와 %d의 이해 char c;

scanf(“%d”, &c );

printf(“%d”, c);

(6)

scanf_s

error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead.

– scanf 함수의 보안상 문제 때문에 가능하면 scanf_s를 쓰라는 Visual Studio의 권고 (VS 2013 이후 부터)

– scanf_s 를 쓰거나, (하지만, 호환성을 해친다. 반대한다.)

– 프로그램 첫 줄에

#define _CRT_SECURE_NO_WARNINGS

를 입력

강C프로그래밍 6

(7)

scanf 의 단점

사용자가 지정한 양식에 맞추어 입력해야 한다.

잘못된 입력을 판단하지 못한다.

입력이란 숫자, 문자와 같이 단순한 형태가 아닐 때가 많 다.

scanf는 사용자의 입력을 기다린다. 그 시간은 아무것도 하지 않는다.

고급 입력 방식이 필요하다.

(8)

4.4 Visual Studio의 디버깅

(9)

개발 과정에서의 디버깅이란

디버깅 (debugging)

– 원하는 결과가 나오지 않으면 원인을 찾아야 한다.

– 프로그램의 실행은 빠르게 지나가지만, 개발자는 실행 단계를 순 차적으로 생각해야 한다.

– 개발자가 원인을 찾을 수 있도록 실행 속도와 단위를 조절하고,

각 단계에서 변수의 값을 추적할 수 있어야 한다.

– 개발자는 변수의 값을 보고 전체적인 흐름을 확인하고 문제점을 찾아간다.

(10)

디버깅 도구

한 단계씩 실행하기 (F10/F11)

– 소스코드를 기준으로 한 행씩 실행한다.

– 각 행을 실행한 후의 결과를 확인할 수 있다.

– 한 단계씩 실행하더라도 실행 순서와 결과는 동일하다.

– 대부분의 개발 도구에 기능이 포함되어 있다.

변수 확인하기

– 실행 중간 단계에서 변수의 값을 볼 수 있다.

– 개발자가 예상한 결과와 동일한 변수 값인지를 확인하여 문제의 위치를 발견한다.

강C프로그래밍 10

(11)

디버깅 방법

값 입력 후 i 값이 제대로 들어가지 않은 것으로 보아 scanf의 양식을 잘못 사용한 것 같다.

(12)

디버깅 방법 - 조사식

강C프로그래밍 12

원하는 수식을 넣어 값을 확인할 수 있다.

(13)

4.5 쉽게 이해하는 코드 만들

(14)

좋은 소스코드

이해하기 쉬운 코드가 좋은 소스코드이다.

어떻게 더 이해하기 쉬운 코드로 만들 수 있는지 고민해야 한다.

주석, 들여쓰기, 공백 넣기 등을 이용하여 보기 좋게 만들어 야 한다.

소스코드는 나만 보는 것이 아니라, 많은 사람들이 볼 수 있 다.

강C프로그래밍 14

(15)

주석

프로그램을 쉽게 이해할 수 있도록 붙이는 설명

컴파일시에는 모두 제거되며, 프로그램에 영향을 주지 않 음

age = age + 1; /* 나이를 한 살 추가함 */

주석 시작(/*)과 끝(*/)은 쌍으로 이루어져 있어야 한다.

// 을 사용할 수도 있다. (C99)

age = age + 1; // 나이를 한 살 추가

주석 시작 주석 끝

주석 시작 행의 끝이 주석 끝

(16)

주석의 예

i = i + 1 ; /* 이 부분은 나이를 하나 증가시키는 것인데

이 문장을 넣은 이유는, 12개월이 지나서 나이를 증가해야 하는데 직접 i 변수를 증가시키는 것이 가장 간단하기 때문이다 */

/*****************************************

* Copyright 2015, Kim *

* 지금까지 며칠이 지났는지 카운트하는 프로그램 *

* 2015년 9월 1일 첫 번째 과제 *

*****************************************/

/* 여기부터 주석이다.

여기에 설명을 한다.

마지막 설명이다.

*/

강C프로그래밍 16

(17)

주석의 활용

변수의 선언시, 용도나 목적을 미리 설명 함수 선언시, 함수의 기능과 사용법 설명 C 문장에 대하여 목적을 설명

– 모든 문장에 다 붙일 필요는 없다. 붙여야 할 문장에만 붙인다.

알고리즘(방법)을 말로 설명

변수의 예측되는 값을 기록 (디버깅시)

(18)

들여쓰기

int main (void) {

int i;

i = 0;

printf(“%d\n”, i );

}

안쪽으로 넣어서 main 의 영역을

쉽게 구분할 수 있다.

C 프로그램은 { } 로 구분된 블록 단위로 구성되어 다단계 의 들여쓰기를 해야 한다. (조건문 참고)

강C프로그래밍 18

(19)

공백 추가

공백 문자의 추가

– i=i+1; 보다 i = i + 1; 이 눈에 잘 들어온다.

– 적절히 넣어주는 공백은 프로그램의 가독성(readability)을 향상시 킨다.

– 문자와 기호 사이에 공백을 넣어서 문자의 내용을 강조한다.

빈 행 추가

– 동일한 단위 목적을 위한 코드는 모아놓고

– 다른 목적을 위한 코드 사이에는 빈 행을 추가한다.scanf (“%d %d %d”, &kor, &eng, &mat );

// 입력 부분과 계산 부 분을 뗀다.

total = kor + eng + mat;

average = total / 3 ;

// 계산 부분과 출력 부 분을 뗀다

(20)

4.6 전처리기

(21)

전처리기 (preprocessor)

본 처리(컴파일) 전에 소스코드에 필요한 처리를 진행

– 소스코드에 지정된 규칙을 적용함

– 효율적인 컴파일, 소스코드 관리, 가독성 향상, 컴파일러에 지시

(22)

전처리기

전처리 지시자 #

– #으로 시작하는 문장은 전처리기가 해야 할 일이다.

– 전처리기가 작업 진행 후에는 모두 제거된 상태에서 컴파일이 진 행된다.

강C프로그래밍 22

(23)

해당 파일을 로딩하여 소스 코드를 대체

#include

#include <stdio.h>

int main (void) { int value = 10;

#include “source2.c”

return 0;

}

1 2 3 4

5 6 7

stdio.h

source2.c 1

2 3 4

5 6 7 main.c

작은 크기의 파일이 사용하기 더 편하다.

(24)

stdio.h

stdio.h는

– C 에서 기본 제공되는 시스템 헤더 파일 – 표준 입출력에 필요한 정의, 선언이 포함됨

– 표준 입출력 기능을 사용하려면 이 파일이 꼭 필요

시스템 헤더 파일

– 개발자가 꼭 필요한 기능들을 편리하게 사용할 수 있도록 필수 기능별로 모아놓은 헤더 파일

– string.h(문자열 처리), math.h(수학함수), stdlib.h(유용한 기능) 등

– 필요하면 몇 개든 불러와 쓸 수 있다. 강C프로그래밍 24

(25)

#define

문자열을 대체

#define RATE 0.03 int main(void) {

float in, balance;

scanf("%f", &in);

balance = in + in * RATE; //합계 = 원금 + 원금 * 이율 printf("rate is %f, balance is %f\n", RATE, balance);

}

{

float in, balance;

scanf("%f", &in);

balance = in + in * 0.03; //합계 = 원금 + 원금 * 이율 printf("rate is %f, balance is %f\n", 0.03, balance);

}

전처리

(26)

#define의 장점

이름 상수와 같이 가독성 향상

#define RATE 0.03

balance = in + in * RATE; //합계 = 원금 + 원금 * 이율

프로그램 입력이 용이해짐

#define HELLOMSG “Hello World. Nice to meet you.”

printf(HELLOMSG);

프로그램의 융통성

#define TOTALMAN 300 // 270으로 바꾸면 전체 프로그램이 270명에 맞추어 동작

totalave = totalscore / TOTALMAN;

강C프로그래밍 26

(27)

전처리기 연산자의 위치

#include <stdio.h> // ① 시스템 헤더 파일

#include “user.h” // ② 사용자 헤더파일

#define RATE 0.03 // ③ #define int main(void) // ④ 소스코드 {

}

(28)

그 외의 전처리 지시자

#pragma

– 컴파일러에게 알리기 위한 목적

#pragma warning (disable:4996)

: scanf 관련 경고를 꺼 라.

#ifdef, ifndef, endif

– 조건에 따른 전처리

– 조건문에서 다시 다룬다

강C프로그래밍 28

참조

관련 문서

④ 독립변수(independent variable)의 유의성 검정 : t-검정을 통해 검정한다 simple regression analysis에서는, independent variable이 하나밖에 없으므 로,

 job_code가 0이면 job_info 공용체 변수의 school_name을 사용하고, job_code가 1이면 company_name을 사용한다...

ƒ 금리, 환율, 통화량, 주가, 물가 등 주요 거시경제 변수의 변동성(variability of macroeconomic variables)으로 경제전체의 불확실성 증대.. 2절 Uncertainty

– 단어의 시작 문자를 대문자로 : AverageScore, TotalScore – 단어 사이에 _를 붙인다 : average_score,

- 따라서 PSC 의 경우 강재지수를 정의하여 강재지수가 일정한 값을 넘지 않으면 저보강 PSC 보로 보고, 그렇지 않으면 과보강 PSC 보로 본다..

이상으로 방법 측면에서는 기후 변수의 생육 단계별 비선형적 영향을 반영하는 혼합주기 모형 (MIDAS)의 적용을, 자료 측면에서는 기후 요인 및 생육 실측 자료의 활용을 통해

• By default, values in Low_High specify the intensity levels that saturate the bottom and top 1% of all pixel values in f... 가변적인 입력 및 출력 개수 다루기

교사가 소회의실에 들어가 있는 동안 메인 회의실에서 어떤 일이 일어나고 있는지를 모니터링하기 위해서는 교사가 두 개의 ID로 접속해야 합니다. 그렇지