5 입출력 함수
1 printf 함수 제대로 사용하기
printf는 데이터를 화면에 출력해주는 함수이다. 함수를 사용할 때는 필요한 데이터를 괄호 안에 넣어 줘야 하는데 이것을 전달인자라고 부른다.
|
전달인자는 세 개(문자열, 변수, 수식) ↓ ↓ ↓ printf("%d인치는 %lf센티입니다.", inch, inch*2.54); ↑ 첫번째 전달인자는 반드시 문자열 |
printf 함수에 필요한 전달인자의 수는 출력되는 값에 따라 가변적이지만 첫번째는 반드시 문자열을 사용해야 한다. 절달인자에 따라 다양한 형태로 출력문을 사용할 수 있는데, 기본적인 사용법부터 복습해 보도록 하자.
|
printf 함수를 사용하는 가장 간단한 형태로 문자열을 그대로 화면에 출력하는 경우에 사용한다. printf("C언어는 1972년 데니스리치가 개발하였습니다."); |
|
출력결과 C언어는 1972년 데니스리치가 개발하였습니다. |
좀더 다양한 형태의 출력을 원한다면 문자열 안에 서식문자를 넣어서 변화를 줄 수 있다. 서식문자는 백슬래시와 소문자로 만들며 문자열 안에서 특별한 동작을 수행하게 되는데 대표적인 예가 줄을 바꾸어 주는 줄바꿈 서식문자(\n)이다.
|
printf("C언어는\n1972년\n데니스리치가 개발하였습니다."); |
|
출력결과 C언어는 1972년 데니스리치가 개발하였습니다. |
많이 사용하는 서식문자 중에 탭 서식문자(\t)가 있다. 이것은 현재의 출력위치를 화면의 다음 탭 위치로 옮기는 기능을 한다. 보통 화면에는 8칸 단위로 탭 위치가 설정되어 있으므로 1열, 9열, 17열 등이 탭 위치가 되는 것이다. 따라서 현재의 출력 위치가 화면의 5열에 있을 때 탭 서식문자를 만나면 출력위치가 9열로 바뀌게 될 것이다.
|
printf("Hani\tFighting!"); |
|
탭 위치 12345678901234567 출력결과 Hani Fight ing! |
이 밖에 다양한 기능을 수행하는 서식문자들이 있는데 간단히 표로 정리해 보면
|
서식문자 의미 기능 \n newline 출력 위치를 다음 줄의 첫번째 칸으로 옮긴다. \t tap 출력 위치를 다음 탭 위치로 옮긴다. \r carriage return 출력 위치를 현재 줄의 첫번째 칸으로 옮긴다. \b backspace 출력 위치를 한 칸 뒤로 옮긴다. \a alert 경보음을 낸다(삑 소리가 난다). |
서식문자에는 특별한 기능을 수행하는 것들도 있지만 단순히 문자출력을 위해 사용되는것 것들도 있다. 예를 들어 다음과 같은 문장을 출력해보자.
우리는 모두 "오! 필승코리아~"를 외쳤습니다.
만약 위의 문장을 단순히 문자열로 묶어서 출력한다면 컴파일 과정에서 에러가 발생하게 된다. 컴파일러는 문자열의 시작과 끝을 큰따옴표로 구분하므로 문자열 중간에 큰따옴표가 들어가게 되면 문자열이 분리되어 문제가 발생하는 것이다.
|
printf("우리는 모두 "오! 필승코리아~"를 외쳤습니다."); 문자열로 인식 인식하지 못함 문자열로 인식 |
이때는 큰따옴표를 백슬래시와 함께 사용하여 단순한 출력문자임을 컴파일러에게 알려야 합니다.
|
printf("우리는 모두 \"오! 필승코리아~\"를 외쳤습니다."); |
같은 원리로 백슬래시 자체를 출력할 때는 백슬래시를 두 번 연속으로 사용한다.
|
큰따옴표 출력 → \" 백슬래시 출력 → \\ |
단순한 문자열 외에 출력할 데이터가 더 있는 경우는 출력할 데이터의 개수에 맞게 변환문자열을 사용한다.
|
첫번째 변환문자열의 위치에 출력 ↑ printf("키:%lfcm, 몸무게:%dkg", 167.5, 45); ↓ 두번째 변환문자열의 위치에 출력 |
|
출력결과 키:167.500000cm, 몸무게:45kg |
변환문자열은 출력할 데이터의 개수와 맞아야 할 뿐만 아니라 데이터의 형태에 따라서 적절한 변환문자열을 사용해야 한다. 지금까지 자료형을 공부하면서 익혔던 변환문자열을 표로 정리하면 다음과 같다.
|
구분 변환문자열 출력형태 대상 자료형 정수형 %d 부호 있는 10진수 signed형의 정수형 변수, 상수 %u 부호 없는 10진수 unsigned형의 정수형 변수, 상수 %o 부호 없는 8진수 signed, unsigned 구분 없이 정수형 데이터를 각 진법에 맞게 출력 %x 부호 없는 16진수 signed, unsigned 구분 없이 정수형 데이터를 각 진법에 맞게 출력 실수형 %lf 부호 있는 소수점 형태 실수형 변수, 상수 %le 부호 있는 지수 형태 실수형 변수, 상수 문자형 %c 하나의 문자 char형 변수, 문자상수 문자형 %s 문자열 char형 배열의 이름, 문자열상수 |
2 변환문자열의 정확한 사용법
컴파일러는 변환문자열과 출력할 데이터의 형태가 일치하지를 확인하지 않는다. 따라서 다음과 같이 실수형 값을 출력하는 데 정수형 변환문자열을 사용할 수도 있다.
|
printf("%d", 3.4); // 출력결과 : 858993459 |
물론 결과는 전혀 엉뚱한 값이 출력되지만 이 문장은 문제없이 컴파일 되고 실행된다. printf 함수는 3.4라는 값이 나타내는 비트열을 정수형으로 알고 10진수로 변환하여 출력하는 것이다. 결국 정수값과 실수값을 표현하는 비트열이 다르므로 다른 값이 출력될 수 밖에 없다.
|
3.4 --------→ 이진 비트열 010000000000101100... ---------------------------------------------→ 3.4 번역할때 실수값표현규칙에 따라 비트열 생성 출력할때 %lf : 실수값 표현규칙에 따라 비트열 해석 3.4 --------→ 이진 비트열 010000000000101100... ---------------------------------------------→ 858993459 번역할때 실수값표현규칙에 따라 비트열 생성 출력할때 %d : 정수값으로 해석하여 10진수로 바꿈 |
그러므로 출력할 데이터의 형태에 맞게 적절한 변환문자열을 사용하는 것이 중요하며, 잘못된 사용으로 인한 오류 책임은 모두 프로그래머의 몫이다.
정수형과 실수형은 크기와 표현법이 다르므로 각각 정확한 변환문자열을 사용해야 하지만 같은 정수형을 출력하는 변환문자열들은 출력 형태에 따라 선택적으로 사용이 가능하다. 단, 정확히 사용하기 위해서는 이들이 데이터를 어떻게 변환하여 출력하는지를 이해할 필요가 있다.
가장 고민해야 하는 내용은 %d와 %u를 구별하여 사용하는 것이다. 변수를 출력할 때는 변수의 자료형에 따라 변환문자열을 선택하면 될 것이다. signed로 선언된 변수라면 %d를 사용하고 unsigned로 선언된 것은 %u를 사용하면 되지만 정수형 상수를 출력할 때는 값의 크기에 따라 적절한 변환문자열을 선택해야 한다.
그렇지 않으면 %d와 %u가 출력할 데이터의 비트열을 각각 다르게 해석하여 역시 엉뚱한 결과가 출력될 것이다. 예를 들어 정수형 상수 -7을 4비트로 표현한다면 다음과 같을 것이다(음수는 2의 보수로 표현된다는 것을 기억하자).
|
%d 부호비트가 1이므로 음수로 출력 ↓ 1 0 0 1 ↑ %u 부호비트를 인정하지 않고 모두 양수로 출력 |
이 값을 %u로 출력한다면 부호비트를 인정하지 않으므로 그대로 10진수로 변환하여 9의 값이 출력되지만 %d는 부호비트를 확인하므로 음수값으로 변환하여 출력하는 것이다. 따라서 음수값을 정확히 출력하기 위해서는 %d를 사용해야 하는 것이다. 반대의 경우도 있는데 만약 양수 9의 값을 출력한다고 하자. 9를 4비트의 비트열로 표현하면 -7과 마찬가지일 것이다. 이 값을 %d로 출력하게 되면 부호비트를 인식하므로 음수로 출력하게 되는 것이다. 이때는 %u를 사용해야하만 정확한 값이 출력될 것이다.
결론적으로 부호비트가 1이 되는 크기의 양수값은 반드시 %u 변환문자열을 사용해야만 정확한 값을 출력한다는 것이다.
|
정수값은 실제로 4바이트의 크기를 가지므로 각 값의 범위에 맞는 적절한 변환문자열은 다음과 같을 것이다. -2147483648 2147483647 0 4294967295 %d 사용 %d, %u 사용 %u 사용 --------------------------- ↑ ↑ 이 범위의 값은 같은 비트열을 사용하므로 어떤 변환문자열을 사용하느냐에 따라 출력되는 값이 달라진다. | |
|
부호비트를 무시하는 변환문자열은 %u 외에도 %o와 %x가 있다. 이 세 가지의 차이점은 화면에 어떤 진법으로 출력되느냐 하는 것이다. %u는 10진수, %o는 8진수, %x는 16진수로 출력되는 것이다. int a=-10; printf("%u\n", a); printf("%#o\n", a); // 접두어를 출력하기 위해서 #플래그를 사용함 printf("%#x\n", a); | |
|
출력 결과 4294967286 // 10진수로 출력 037777777766 // 8진수로 출력 0xfffffff6 // 16진수로 출력 | |
출력 결과로 확인할 수 있듯이 같은 값을 단지 다른 진법으로 출력한 것이다. -10의 값은 분명히 부호비트가 1일 것이고 %u 변환문자열은 이 비트를 부호비트로 인정하지 않으므로 큰 값이 출력된 것이다. %o와 %x는 같은 값을 각각 8진수와 16진수로 출력한 것이다.
변환문자열의 의미를 정확히 파악했다면 정수값과 문자가 서로 같이 사용되는 것도 쉽게 이해할 수 잇다. 즉, 문자상수를 %d 변환문자열로 출력하면 10진수의 아스키코드값이 출력될 것이다. 반대로 아스키코드값의 범위에 해당하는 정수값을 %c로 출력하면 그에 해당하는 아스키문자가 출력되는 것이다. 결국 동일한 데이터를 어떻게 해석하여 출력하느냐를 결정하는 것이 변환문자열의 역할인 셈이다.
|
정수값 65 → 0100 001(데이터 비트열) → %d를 사용 → 65 문자상수 'A' → 0100 001(데이터 비트열) → %c를 사용 → A (위에서 정수형 상수 65는 실제로는 4바이트의 비트열로 번역되지만 왼쪽의 3바이트는 모두 0이므로 변환문자열이 값을 해석하는 데 영향을 미치지 않는다.) printf 함수의 문자열 안에서 %를 사용하면 변환문자열로 해석되므로 % 문자 자체를 출력할 때는 % 기호를 두 번 사용하여 출력한다. printf("당신은 나의 100%% 여인입니다."); |
3 세련된 출력을 지원하는 변환문자열의 옵션
변환문자열 % 기호와 변환문자로 구성되지만 추가로 옵션을 사용하면 출력 형식을 다양하게 바꿀 수 있다.
|
예를 들어 정수값 세 개를 다음과 같이 화면에 출력한다고 하자. ←10칸→ 128 65535 2002 |
이와 같이 출력하기 위해서는 변환문자열에 필드 옵션을 사용한다. 필드옵션은 화면에 출력할 자릿수를 확보하고 오른쪽에 정렬하여 출력하게 된다.
|
% 10 d (% : 변환문자열의 시작, 10 : 필드옵션(화면에서 10자리를 확보), d : 변환문자) |
필드옵션을 사용할 때는 출력할 데이터의 전체 길이를 예상하여 그보다 큰 값을 주어야 한다. 작으면 필드옵션은 무시되고 기본적인 출력 형태를 따른다.
실수값을 출력할 때는 필드옵션에 소수점 이하의 자릿수를 지정할 수 있다. 지정하지 않으면 기본적으로 소수점 이하 여섯째자리까지만 출력된다(나머지 부분은 반올림된다).
|
% 10.2 lf (10 : 화면에서 10자리를 확보, .2 : 소수점 이하 둘째자리까지만 출력) |
플래그옵션은 주로 필드옵션과 함께 사용하여 출력 형식에 변화를 준다. 예를 들어 10자리의 출력 공간을 확보하고 왼쪽에 맞추어 출력해야 한다면 '-' 플래그를 사용한다.
|
% - 10 d (- : 왼쪽정렬 플래그, 10 : 필드폭) |
필드옵션과 함꼐 사용되는 플래그로 '0' 플래그가 있다. 변환문자열에 필드옵션을 주면 기본적으로 우측에 정렬하여 출력되는데, 이때 남는 왼쪽의 공간을 모두 0으로 채우는 플래그이다.
필드 폭과 관게없이 사용되는 플래그로 '+' 플래그와 '#' 플래그가 있다. 보통 양수값을 출력할 때는 부호가 붙지 않는데 + 플래그를 사용하면 부호와 함께 춮력된다. # 플래그는 8진수나 16진수를 출력할 때 10진수와 구별하기 위해 접두어를 붙여주는 플래그이다.
|
printf("%-10c%c\n", 'A', 'B'); printf("%010d\n", 1971); printf("%+d\n", 128); printf("%#x\n", 2005); printf('%#010x\n, 0x7d5); // 출력값이 16진수로 표현된 상수이다. // 플래그를 중복해서 사용하는 것도 가능하다. |
|
출력 결과 A B // A는 10자리 확보하고 왼쪽에 출력, B는 11칸에 출력 0000001971 // 10자리 확보하고 오른쪽에 출력, 남는 공간은 0으로 채움 +128 // 양수값을 '+'기호와 함께 출력 0x7d5 // 16진수 접두어와 함께 출력 0x000007d5 // 접두어도 출력하고 남는 공간은 0으로도 채움 |
printf 함수로 다양한 출력을 원한다면 첫번째 전달인자인 문자열이 복잡하게 구성될 것이다. 반면에 데이터를 입력하는 scanf 함수는 문자열의 구성이 비교적 간단하다. 이제 scanf 함수를 정확히 사용하는 방법을 배워보도록 하자.
4 scanf 함수 제대로 사용하기
키보드로부터 변수 값을 입력 받을 때는 scanf 함수를 사용한다. scanf 함수에 필요한 첫번째 전달인자는 문자열이며 두 번째 전달인자부터 입력 받을 변수를 차례로 나열해 주면 된다. 첫번째 문자열은 입력 받을 변수의 개수와 순서에 맞게 변환문자열로 구성한다. 물론 변수의 형태에 맞는 적절한 변환문자열을 사용해야 할 것이다.
입력에 사용되는 변환문자열은 기본적으로 printf 함수에서와 같다.
|
구분 변환문자열 입력형태 입력되는 변수의 자료형 정수형 %d, %u 10진수 char, short, int, long형 변수 %o 8진수 char, short, int, long형 변수 %x 16진수 char, short, int, long형 변수 실수형 %lf, %le 소수점 또는 지수형 double형 변수 문자형 %c 하나의 문자 char형 변수 문자형 %s 하나의 문자열 char 배열 |
정수값을 10진수 형태로 입력 받을 때는 %d와 %u를 함께 사용할 수 있다. 실수형을 입력받을 때도 소수점 형태나 지수 형태의 구분 없이 %lf 또는 %le 어떤 것을 사용해도 입력이 가능하므로 간단히 정수값은 %d, 실수값은 %lf를 사용하여 입력 받으면 된다. 단, 입력되는 값과 변수의 저장 범위는 일치시켜야 한다. 예를 들어 unsigned 형태로 처리되어야 할 정수값이라면 %d 변환문자열을 사용하지만 변수는 unsigned로 선언하는 것이 마땅하다.
이미 앞에서 언급했지만 scanf 함수를 사용할 떄는 변수명 앞에 기호 &를 붙이는 것을 잊어서는 안된다. 보통 함수의 전달인자로 변수명을 사용하게 되면 그 변수에 저장되어 있는 값이 함수에 전달된다. printf 함수를 사용할 때도 변수명을 전달인자로 주면 그 변수에 저장된 값이 출력되는 것이다.
|
변수 a 10 printf("%d", a); | ↑ 변수에 저장된 값이 전달됨 |
그러나 scanf 함수는 반대로 키보드로부터 입력되는 값을 변수에 저장하는 것이므로 저장할 위치에 대한 정보를 필요로 하므로 변수명 앞에 & 기호를 붙여서 기억공간의 위치를 표시하는 것이다.
|
변수 a의 메모리 위치가 100번지라면 (100)? scanf("%d", &a); | ↑ 변수의 메모리 위치(번지)값이 전달됨 |
단, 문자열을 입력할 때는 char 배열의 배열명을 그대로 사용해야 한다. 이것은 배열명 자체가 기억공간의 위치를 의미하기 때문이다.
|
char str[100]; // 문자열 저장을 위한 char 배열 scanf("%s", str); // 배열의 이름인 str 앞에는 '&'기호가 붙지 않음 |
printf 문을 자주 사용하다 보니 scanf에서도 습관적으로 다른 문자열을 사용하게 된다. 이때 컴파일러는 에러를 발생시키지 않지만 실행할 때 데이터가 정확히 입력되지 않는다. 예를 들면, 다음과 같은 문장을 무의식 중에 사용하게 된다.
|
scanf("정수를 입력하세요 : %d%d", &a, &b); // 입력 안내 메시지 사용 scanf("%d %d\n", &a, &b); // 빈칸이나 새줄문자의 사용 |
컴파일러가 에러를 발생시키지 않는 것은 사용한 문자열이 문법적으로 의미가 있기 때문이지만 특별히 사용할 필요가 없는데다 혼란을 줄 가능성이 많으므로 사용하지 않는 것이 좋다. 단, %c 변환문자열과 관련된 공백 사용은 특별한 의미가 있으므로 살펴보기로 하겠다.
예를 들어 두 개의 int형 변수에 정수값을 입력 받는다고 하자.
|
scanf("%d%d" &a, &b); |
이 문장이 실행되면 화면에서 값을 입력받을 것이고 이때 10과 20을 입력한다면 두 값 사이에 한 칸을 띄우고 입력할 것이다. 만약 1020 같이 입력하면 컴퓨터는 전체를 하나의 데이터로 생각할 것이기 때문이다.
이와 같이 두 개 이상의 값을 입력할 때 구분하기 위한 문자로 사용되는 것이 공백문자이다. 공백문자 외에 탭문자와 새줄문자를 포함한 화이트 스페이스를 모두 구분문자로 사용할 수 있다. 각각 키보드의 Space 키와 Tap 키, Enter 키를 칠 때 입력되는 문자들이다.
이번에는 같은 방법으로 두 개의 char형 변수에 문자를 입력 받는 경우를 생각해보자.
|
char ch1, ch2; printf("두 개의 문자를 입력하세요 : "); scanf("%c%c", &ch1, &ch2); printf("첫번째 문자 : %c\n", ch1); scanf("두번째 문자 : %c\n", ch2); |
|
출력 결과 두 개의 문자를 입력하세요 : x y (Enter) // x와 y 사이에 스페이스로 구분하여 입력 첫번째 문자 : x // x는 출력되었으나 두번째 문자 : // y는 츨력되지 않음 |
출력 결과를 보면 문자 x는 출력되었으나 y는 출력되지 않았는데 결과만 보고 오류를 찾고자 하면 출력문을 의심할 것이다. 그러나 사실은 ch1에는 x가 입력되었지만 ch2에는 구분문자인 공백문자가 입력된 것이다. 따라서 두 번째 출력은 ch2에 입력된 공백문자가 출력된 것이다.
|
ch2 변수 ↑ x y ↓ ch1 변수 |
정수나 실수와 같은 숫자 데이터를 입력할 때는 화이트 스페이스가 구분문자로 활용되지만 문자를 입력할 때는 구분문자 또한 하나의 데이터로 입력이 되는 것이다.
만약 화이트 스페이스를 구분문자로 쓰고자 한다면 %c 변환문자열 앞에 공백을 함께 사용해야 한다(탭문자와 새줄문자도 사용할 수 있다).
|
" %c" → 화이트 스페이스를 구분문자로 인식함 |
따라서 다음과 같이 사용하면 x와 y가 ch1과 ch2에 각각 입력될 것이다.
|
scanf("%c %c", &ch1, &ch2); |
그렇다면 두 개의 문자를 각각 별도로 입력 받는 경우는 어떻게 될까?
|
1. char ch1, ch2; 2. printf("첫번째 문자를 입력하세요 : "); 3. scanf("%c", &ch1); 4. printf("두번째 문자를 입력하세요 : "); 5. scanf("%c", &ch2); 6. printf("첫번째 문자 : %c\n, ch1); 7. printf("두번째 문자 : %c\n, ch2); |
|
출력 결과 첫번째 문자를 입력하세요 : x (Enter) 두번째 문자를 입력하세요 : 첫번째 문자 : x 두번째 문자 : |
두 문자는 3번과 5번에서 각각 따로따로 입력을 받으므로 정상적으로 수행되리라 생각하겠지만 출력은 예상 밖의 결과를 보여준다.
그 원인은 첫번째 문자를 입력할 때 같이 입력되는 Enter 키에 있다. 이 Enter 키에 대한 아스키코드값인 새줄문자가 5번 scanf 함수가 실행될 때 ch2에 자동으로 저장되는 것이다. 따라서 ch2는 입력을 받지 않은 채 바로 6번과 7번의 출력 문장이 실행되는 것이다.
결국 3번과 5번의 두 입력문은 서로 어떤 관계가 있다는 것인데, 이 문제를 해결하기 위해서는 버퍼(buffer)에 대한 개념을 이해할 필요가 있다.
키보드에서 입력하는 데이터는 바로 변수에 저장되지 않고 버퍼(buffer)라고 하는 저장공간에 잠시 저장되었다가 입력이 된다. 먼저 첫번째 입력문이 실행될 때의 상황은 다음과 같다.
|
(입력문 실행) (버퍼의 상태) (변수 ch1) 첫번째 문자를 입력하세요 : x (Etner) → x \n x | ↑ x 한 바이트만 입력 |
첫 번째 문자를 입력 받을 때 키보드로부터 입력되는 문자와 함께 엔터에 대한 새줄문자가 버퍼에 저장되게 된다. 그리고 'x' 한 바이트만 변수에 저장되고 새줄문자는 그대로 버퍼에 남아있게 되는 것이다. 두 번째 입력문이 실행될 때는 버퍼에 남아 있는 새줄문자를 가져다가 바로 ch2 변수에 입력하게 되는 것이다. 따라서 첫 번째 출력문은 ch1에 저장된 x가 출력이 되지만 두 번째 출력문은 새줄문자가 출력되어 단지 줄만 바뀌고 프로그램이 종료되는 것이다.
결국 두 번째 입력문에서 새줄문자가 하나의 문자 데이터로 입력되므로 문제가 발생한 것이다. 이 문제를 해결하기 위해서는 두 번째 입력문의 변환문자열을 공백과 함께 작성해 주면 된다. 그러면 버퍼에 있는 새줄문자를 구분문자로 인식하기 때문에 키보드로 새로운 데이터를 입력 받게 되는 것이다.
|
두 번째 입력문은 공백과 함께 작성 → scanf(" %c", &ch2); |
이와 같은 문제는 숫자 데이터가 입력될 때는 발생하지 않는다. 숫자가 입력되는 변환문자열들은 기본적으로 화이트 스페이스를 구분문자로 인식하기 때문이다. 그러나 문자가 입력될 때는 항상 그 이전에 다른 입력문이 있는지를 확인한 후 적절한 변환문자열을 사용해야 할 것이다.
문자와는 다르게 문자열을 입력할 때는 구분문자를 인식하게 된다. 따라서 문자열을 입력할 때 중간에 빈칸이 들어가게 되면 앞부분의 문자열만 입력이 되는 것이다.
|
Reference : 뇌를 자극하는 C 프로그래밍, 서현우, 한빛미디어 |
Trackback ADDRESS :: http://blog.sinovino.org/trackback/8
-
Tracked from SiNoViNo♂ 언제나 졸림
2007/07/14 19:14
DELETE
Subject: 4 데이터의 표현과 연산(2)
블로그 > 블로그 http://blog.naver.com/sth0622/140039954979 1 다양한 정수의 표현법과 자료형 지금까지 프로그램에서 사용한 정수형 상수는 모두 10진수의 형태였지만 C언어는 다른 진법으로도 정수값을 표현하는 것이 가능하며 이들을 저장하기 위한 자료형도 크기에 따라 여러 가지가 있다. 뿐만 아니라 입출력도 여러 가지 진법으로 수행이 가능하다. 먼저 다른 진법으로 정수형 상수를 표현하는 방법부터 살펴본다. 프로그..
-
Tracked from SiNoViNo♂ 언제나 졸림
2007/07/15 18:40
DELETE
Subject: 6. 선택문 C 프로그래밍
2007/07/15 00:56 http://blog.naver.com/sth0622/140040075150 1 조건식에 사용되는 연산자 일반적으로 프로그램에 작성된 문장들은 항상 실행되어야 할 것이다. 그러나 경우에 따라서 특정 문장을 선택적으로 실행시켜야 할 경우도 있다. 예를 들어, 입력된 두 정수값을 계산하여 몫을 구하는 프로그램을 생각해 보자. int a, b, res; printf("두 정수를 입력하세요 : "); scanf("%d%d",..
-
Tracked from SiNoViNo♂ 언제나 졸림
2007/07/17 16:23
DELETE
Subject: 4 데이터의 표현과 연산(2)
블로그 > 블로그 http://blog.naver.com/sth0622/140039954979 1 다양한 정수의 표현법과 자료형 지금까지 프로그램에서 사용한 정수형 상수는 모두 10진수의 형태였지만 C언어는 다른 진법으로도 정수값을 표현하는 것이 가능하며 이들을 저장하기 위한 자료형도 크기에 따라 여러 가지가 있다. 뿐만 아니라 입출력도 여러 가지 진법으로 수행이 가능하다. 먼저 다른 진법으로 정수형 상수를 표현하는 방법부터 살펴본다. 프로그..
-
Tracked from SiNoViNo♂ 언제나 졸림
2007/07/17 16:23
DELETE
Subject: 6. 선택문 C 프로그래밍
2007/07/15 00:56 http://blog.naver.com/sth0622/140040075150 1 조건식에 사용되는 연산자 일반적으로 프로그램에 작성된 문장들은 항상 실행되어야 할 것이다. 그러나 경우에 따라서 특정 문장을 선택적으로 실행시켜야 할 경우도 있다. 예를 들어, 입력된 두 정수값을 계산하여 몫을 구하는 프로그램을 생각해 보자. int a, b, res; printf("두 정수를 입력하세요 : "); scanf("%d%d",..

음..a\nb를 하면
a
b
가 되는게 아니라
a
b
가 되지요...//Encrypted IP : 369.208.354.5xx
흠냐 ;;;어디지 ..//Encrypted IP : 371.280.172.0xx