728x90
4.10 scanf() 함수의 사용법
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i;
float f;
char str[30];
scanf("%d %f %s", &i, &f, str); // string은 &사용 X
printf("%d %f %s\n", i, f, str);
return 0;
}
Output :
123 3.14 hello 입력 ->
123 3.140000 hello
- scanf()는 띄어쓰기와 줄바꿈으로 입력을 구분
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char c;
scanf("%c", &c);
printf("%i\n", c); // 입력받은 문자의 ASCII Code 출력
unsigned u;
scanf("%i", &u); // unsigned를 signed로 입력받음 -> 자료형과 변환지정자가 맞지 않음
printf("%i\n",u); // signed를 출력
unsigned u2;
scanf("%u", &u2); // 음수 입력시 overflow 발생
printf("%u\n", u2);
return 0;
}
Output :
-> 빈칸 (blank) 입력
32
-123 입력 ->
-123
-123 입력 ->
4294967173
- 빈칸 (blank)도 고유의 ASCII Code가 있다 (32)
- u에서 unsigned 변수를 signed로 받고 출력하므로 음수 입력이 가능 -> 자료형에 맞지 않는 변환지정자 사용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
double d = 0.0;
scanf("%lf", &d); // printf에서는 float과 double을 %f로 받았으나,
printf("%f\n", d); // scanf에서는 float은 %f, double은 %lf 사용
char str[30];
scanf("%5s", str); // 5글자 까지만 입력 가능
printf("%s\n", str);
char i;
scanf("%hhd",&i); // 123a456 입력시 123만 입력을 받고 a에서 입력을 멈춤
printf("%i\n",i);
return 0;
}
Output :
123.456 입력 ->
123.456000
abcdefgh 입력 ->
abcde
123a456 입력 ->
123
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a, b;
int i = scanf("%d%d", &a, &b); // return value of scanf() = 몇개의 변수를 입력받았는가
printf("%d\n", i);
// *modifier for printf()
int j = 123;
int width = 5;
printf("Input width :");
scanf("%d", &width); // 출력할 때의 width를 조정
printf("%*d\n", width, j); // width가 *에 들어감
// *modifier for scanf()
int k;
scanf("%*d %*d %d", &k); // 앞에 *이 붙은 변환지정자는 무시. 입력은 3개를 받으나
// 앞의 2개는 무시하고 3번째 입력을 k에 넣음
printf("Your third input = %d", k);
return 0;
}
Output :
123 456 입력 ->
2
Input width :5 입력 ->
123 (앞에 두칸 띔)
123 456 789 입력 ->
Your third input = 789
5.1 반복 루프와의 첫 만남
#include <stdio.h>
int main()
{
int n = 1; // 반복문의 초기 조건
while (n < 11) { // 반복문이 반복될 조건
printf("%d\n", n);
n = n + 1; // 변하는 조건
}
return 0;
}
- 괄호 안의 조건을 만족하는 동안 계속 중괄호 안의 코드를 반복
Output :
1
2
3
4
5
6
7
8
9
10
5.2 대입 연산자와 몇 가지 용어들
기본 연산자들 -> =(대입 연산자) ,+, =, *, /
- 연산자 operator
- 피연산자 operand -> 변수, 리터럴등(i, 1)
- Data object (object) : 메모리에 있는 데이터를 object 형태라 부름. 이 형태가 발전하여 객체지향 프로그래밍이 나옴
- L-value (object locator value) : 등호 왼쪽의 값. 어떤 값을 대입할 수 있는 공간, 메모리를 차지하고 있는 특정 데이터 객체(개체). L-value는 임시적으로 R-value의 역할을 할 수 있음 ex) i = i + 1에서 오른쪽의 i (자기가 가지고 있는 값을 의미). data object가 L-value가 될 수 있음
- *object locator = 메모리 주소.
- R-value (value of an expression) : 등호 오른쪽의 값, 대입할 값. 값 자체를 의미. 수정 가능한 L-value에게 대입될 수는 있지만, R-value는 메모리 공간을 가지고 있지 않기 때문 자기 자신은 L-value가 될 수 없음.
int i; // data object
i = 1024; // 오른쪽의 값을 왼쪽에 대입.
// 1024는 임시적으로 생겨난 상수 -> data object가 아님
i = i + 1; // i는 메모리 주소를 대표하는 변수명
const int TWO = 2; // TWO는 수정 불가능한 L-value. 여기서 = 는 대입이 아니라 초기화
int a, b, c; // 수정 가능한 L-value
a = 42; // 42, (a + b) -> R-value
b = a;
c = TWO * (a + b); // (a + b)는 프로그램이 계산하는 임시 값(expression). 계산이 끝나면 사라짐
강의 출처 : https://www.inflearn.com/course/following-c/dashboard
'Study_C, C++ > 홍정모의 따라하며 배우는 C언어' 카테고리의 다른 글
[홍정모의 따라하며 배우는 C언어] 5.6 연산자 우선순위와 표현식 트리 ~ 5.8 증가, 감소 연산자 (0) | 2021.08.25 |
---|---|
[홍정모의 따라하며 배우는 C언어] 5.3 더하기, 빼기, 부호 연산자들 ~ 5.5 나누기 연산자 (0) | 2021.08.23 |
[홍정모의 따라하며 배우는 C언어] 4.9 printf() 함수가 인자들을 해석하는 과정 (0) | 2021.08.19 |
[홍정모의 따라하며 배우는 C언어] 4.6 명백한 상수들 ~ 4.8 변환 지정자의 수식어들 (0) | 2021.08.18 |
[홍정모의 따라하며 배우는 C언어] 4.3 문자열이 메모리에 저장되는 구조 ~ 4.5 기호적 상수와 전처리기 (0) | 2021.08.16 |