정리 차원에서 토막 토막 study 폴더에 차곡 차곡 쌓인 내용들을 하나의 파일에 압축시켜본다.
컴파일러나 운영체제에 구속받지 않게 소스만 따로 파일을 올려놓는다.

예제에 들어간 내용들 : class 기본(private 멤버 변수 초기화 - 멤버 변수 이니셜라이저), public 상속,
object 생성, 콘솔 입출력, 객체 멤버 접근, 변경, 생성자 오버로딩, 생성자/소멸자 호출 타이밍, virtual 함수, fflush

아 참.. 주석은 영어로 했음;; ㅈㅅ;

Posted by 독뽀
,

자바는 객체 지향(Object-Orient) 언어이다.
객체 지향 언어는 현실 세계와 매우 밀접하다. 나는 객체 지향의 목표도 바로 그것이라 생각한다!
객체 지향에는 여러 특성이 있지만 기존의 절차 지향 언어(C언어 등)와 확연히 구분되는 것을 요약해본다.
아래 내용은 C++/JAVA 가리지 않고 공통되는 내용이니 참고했으면 한다.

(25th May, 2010)
술먹고 순식간에 써내려갔던거라 상속의 내용이 무관한 부분만 얘기하여 수정

① 상속(Inheritence)

- 클래스(Class)란 객체(Object)의 선언과 정의이다. 클래스가 객체를 생성할 수는 있어도 객체는 클래스를 생성할 수 없다. 클래스는 자신의 상태(member fields - 이하 속성)와 행동(member method/function - 이하 기능)을 갖고 있다. 반드시 모두 가질 필요는 없지만 절차지향형 프로그래밍 언어와 구분되는 점이 바로 이런 동시에 속성과 기능을 가지는 것이다. 절차지향의 경우 기능에 초점을 두기 때문에 속성들을 따로 관리한다. 하지만 객체지향에서는 속성과 그 속성을 가지고 할 수 있는 일들을 속성이 포함된 클래스에 함께 정의한다. 속성과 기능이 함께 관리되어질 수 있는 이 개념이 클래스를 가장 쉽게 설명할 수 있을 것 같다. 여러 프로그래밍 언어마다 틀리지만 클래스는 프로그래밍 상에서 메모리 공간에 올라가기 보다는 선언/정의를 참조하여 객체를 생성하는 용도로 쓰인다. 실제로 메모리 공간에 올라가는 내용이 바로 객체라는 말이다. 하나의 클래스로 여러 객체를 만들 수 있다. 객체가 붕어빵이라고 하면 클래스는 붕어빵 틀 정도로 보면 되겠다. 그렇다면! 조금 다른 모양의 붕어빵을 만들고 싶다면 우리는 어떤 작업을 해야할까? 새로운 붕어빵 틀을 구매해도 될 것이고 붕어빵 틀을 열심히 다듬어서 다른 모양으로 바꾸어도 될 것이다. 기존 붕어빵 모양은 이제 더 이상 생산할 필요가 없는 경우가 아니라면 후자보다는 전자가 더 우리에겐 더 좋아보인다. 붕어빵 틀을 개조할 정도의 능력이라면 말이다. 하지만 프로그래밍에서는 전자보다 후자가 더 이득이다. 왜냐하면 우리의 소스코드들은 복사가 가능하기 때문이다! 단순히 복사만 해서는 생산적인 경우가 별로 없을 것이다. 기존 클래스에서 그대로 쓸 내용은 그대로 쓰고 추가만 해야할 경우, 우리는 상속이라는 멋진 개념을 사용할 수 있다. 말 그대로이다. 상속은 붕어빵 틀을 이용해서 두머리 붕어빵, 세머리 붕어빵, 녹색 붕어빵 등 다양하게 사용 가능하게 한다. 추가할 수도 있고, 삭제할 수도 있다. 기능(method/function)을 수정하는 경우에는 오버라이딩(Overriding)한다 라고 말한다.
우리가 프로그래밍 언어에서 상속을 이야기 할 때는
자식이 부모를 상속한다.
부모가 자식에게 상속되어진다.
라고 표현한다.

이 클래스와 객체의 개념은 다형성과 연결된다.

참고 : 부모 클래스는 슈퍼 클래스와 같은 말이며 자식 클래스는 서브클래스와 같은 말이다.

② 다형성(Polymorphism)과 추상화(Abstract)

- 앞서 본 클래스는 객체들의 공통 속성을 가지고 있을 것이다. 사람 클래스를 예로 들자면
남자든 여자든 이름을 가질 것이며, 인종, 태어난 곳, 태어난 시간 등이 생성되는 순간 결정될 것이다.
사람(클래스)의 하나인 똘이(객체)를 프로그램상에 구현한다고 하자.
클래스에서 정의된 내용 외에 생김새라던지 이 객체에 맞도록 추가하거나 변경되는 내용들이 있다.
상속이 불가능하다면 객체 생성마다 매번 새로운 클래스를 정의하고 객체들을 만들어야 할 것이다.
그 객체들마다 앞에서 정의한 이름, 인종, 태어난 곳, 태어난 시간 등을 불필요하게 계속 다시 정의해야할 것이다.
또한 맹구와 영구라는 객체를 생성했을 때 이들이 하는 행동이 모두 같지는 않을 것이다.
이를테면 맹구는 전속력으로 달리면 8m/s의 속도를 내고 영구는 7m/s의 속도를 낸다고 하자.
맹구.전속력달리기() 의 값이 8이고,
영구.전속력달리기() 의 값은 7이다.
전속력달리기() 는 행동이며 사람 클래스의 공통 메서드이다.
(메서드(Method)란 함수(Function)와 동일한 뜻이며 C/C++에서와는 달리 자바에서는 메서드라고 부른다.)
그런데 맹구는 전속력달리기를 하면 보폭이 커지는 반면, 영구는 보폭은 좁아지지만 속도가 빨라진다.
같은 전속력달리기 메서드이지만 영구 객체를 정의할 때 기본적인 속력에 관한 부분은 기정의된 내용을 따르고
추가로 이런 내용을 입력할 것이다.
이것이 바로 다형성이다.
객체 지향언어에서의 다형성은 오버로딩(Overloading)에서 명확해지는데,
매개변수(Parameters)를 다르게 하여 같은 이름의 함수를 계속 정의할 수 있다는 것이다.
(리턴 타입은 다르게 해도 오버로딩되지 않는다.)
공개된 공통 메서드나 공용 콘트롤(추상화-Abstract)은 인터페이스(Interface)를 사용 가능하게 한다.
추상화 되어있는 클래스를 이제는 사람 뿐 아니라 사자, 코끼리 정도로 확대해보자.
이들은 포유류라는 클래스 혹은 생물이라는 클래스에서 파생되었을 것이다.
사람, 사자, 코끼리는 모두 전속력달리기() 메서드를 가질 수 있다.
그렇다면 프로그래머는 포유류 혹은 생물 클래스의 공용 콘트롤을 알게 됨으로써
전속력달리기()라는 메서드를 인터페이스로써 각 객체에 동일하게 사용할 수 있다.

참고: 자바에서는 interface와 abstract라는 키워드를 제공하지만 C++에서는 순수 가상 함수 등을 이용해 추상화 클래스를 만들어 사용한다.

참고: 오버로딩과 오버라이딩, 둘의 공통점이라면 이름이 같은 메서드를 사용한다는 것이고, 오버로딩은 매개변수의 타입이나 갯수가 다를 때 각기 다른 메서드로 인식하게끔 한다는 것이다. 오버라이딩은 재정의다. 기존 메서드를 재정의함으로써 덮어버리고(ride) 내 것을 쓴다는 개념이다.

③ 캡슐화(Encapsulation)

- 캡슐화는 정보 은닉(Inform hiding)을 말한다. 생성한 각 객체들은 변수와 메서드로 이루어져 있을 것이다.
이 변수와 메서드는 클래스를 정의한 곳을 보면 각 값들에 대한 접근 권한을 알 수 있는데
public, protected, private이 권한에 대한 키워드이다.
public는 외부에서 어느 객체든지 접근할 수 있다.
protected는 외부에서 객체 자신만이 접근할 수 있다.
private는 외부에서 접근이 불가능하다.
캡슐화로 인해 굳이 외부에 노출되지 않아도 되는 정보나
사용자가 굳이 알 필요가 없는 정보를 private나 protected 등으로 감춤으로써 보안의 정도가 상승된다.

보통 API에 캡슐화가 많이 적용된다.
굳이 로우레벨의(시스템의 깊숙한 작동 원리 등) 동작을 몰라도 우리가 사용할 수 있게 하는 것,
캡슐화가 잘 되어있을 수록 우리는 모르는게 많아지겠지만 그만큼 편리해진다고도 생각해볼 수 있다.

참고 : 아무것도 안적으면 자바는 default(같은 패키지 내에서만 접근 가능, 상속 여부 무관)로 선언이 되며, C++에서는 private으로, Objective-C에서는 protected로 선언 된다.

자바의 퍼포먼스

자바는 흔히 퍼포먼스가 좋지 않다는 말을 많이 한다.
자바는 컴파일을 하면 Bytecode로 된 .class 파일을 생성하는데 class 파일은 앞 장에서
말한 JVM을 이용해서 실행 가능하다.
JVM은 OS나 Platform에 대해 굉장히 유연하다. JVM만 설치된다면 어디서든 실행이 가능하다는 말이다.
이 VM의 요소 중 퍼포먼스를 떨어뜨리는 요인은 GC(Garbage Collection)에 있다. GC는 프로그램 종료 시 사용하지 않는 메모리를 시스템에 반환해주는 역할을 한다. 기존의 C나 C++은 malloc()/free() 나 new/delete 로 메모리 공간을 프로그래머가 확보한 경우 프로그래머가 삭제를 해야만 정확히 반환이 된다. 이 말은 프로그래머가 OS에게 메모리를 내놓으라고 했으면 마무리도 프로그래머에게 책임이 있다는 뜻이다. 자바는 이런 오류가 발생할 확률을 줄이고자 GC를 내놓았다. GC는 자동이며 억지로 호출은 가능하나 JVM에서 정의된 내용대로 행동하기 때문에 콘트롤은 불가능하다. JVM을 뜯어고친다면 모를까..
쨌든! 자바를 공부하기 시작했다면 이 정도는 알고 있기를 바라며 마무리~

참고 : 안드로이드 플랫폼에서 주로 자바로 개발한다는 말을 많이 들었을 것이다.
당연히(?) 안드로이드 플랫폼에도 VM(Virtual-Machine)이 있다.
하지만 PC용 JVM을 사용하기에는 덩치가 너무 커서 간소화(?) 버전인 Dalvik Virtual Machine 이 사용된다.
역시 JDK가 아닌 Android SDK가 사용된다.
실행 파일 역시 .class가 아닌 .dex (Dalvik EXcutable) 파일이 사용된다.
자바 문법이 대충 끝날 때 쯤 안드로이드도 시작해볼까 한다. ㅎㅎ
아마도 JavaFX도 같이 시작되지 싶다.

'Programming Languages > Java' 카테고리의 다른 글

변수(2)  (0) 2010.04.27
변수(1)  (0) 2010.04.27
자바 필수 상식 (1) - Some questions  (0) 2010.03.13
Hello World!  (0) 2010.03.13
EditPlus에서 Java 컴파일, 실행하기  (0) 2010.03.09
Posted by 독뽀
,

fseek() : 커서 옮기기, reverse나 rollback처럼 뭐 그런거..
_fcloseall() : 열린 파일 모두 닫기, fclose 여러번 할 필요가 없게 해줌. 리턴 값은 닫은 파일 갯수
참고로 %u는 부호 없는 10진수(부호 있는 10진수는 %d)

C에 올라오는 게시물들을 보면 아시겠지만 너무 찾기도 쉽고 조금만 공부해보면 대부분 아는 내용들 혹은
알 수 있는 내용들에는 전혀 언급을 안합니다. 이렇게 불친절하게 올릴거 왜 올리냐 하지 마시길~

#include <stdio.h>
#include <string.h>

#define buf 20

FILE *fp1, *fp2;

int main(void)
{
      int i=0;
      char arr[buf];
      //int numclosed;
      errno_t err;

      err = fopen_s(&fp1, "test.txt", "w");      // fopen() 대신 fopen_s()를 사용하였다.
                                                            // 첫번째 인수가 FILE 포인터인 것을 빼면 별 다를 것 없다.
                                                            // 리턴 값은 errno_t형 err에 저장되었는데, 실패하면 0
      if(!err)    // open에 실패했을 경우 0이 err에 대입되었으니 아래 문장이 실행될 것이다.
            printf_s("1test.txt file was not opened\n",stdout);
      else
      {
            fprintf_s(fp1, "Hello file I/O!?\n");
            //fseek( fp1, 0L, SEEK_SET );
      }
      fclose(fp1);

      err = fopen_s(&fp2, "test.txt", "r");
      if(err)
            printf_s("2test.txt file was not opened\n",stdout);
      else
      {
            while(1)
            {
                  fscanf_s(fp2, "%c", &arr[i], 1);      // %s로 읽으면 공백에서 끊어져버린다.
                  if( arr[i] == '\n' ) break;              // 그래서 %c로 개행문자(\n)이 나올 때까지 읽기
                  i++;
            }
            arr[i] = 0;
            printf("%s\n", arr);
      }

      fclose(fp2);
      /*
      numclosed = _fcloseall();
      printf("Number of closed file : %u\n", numclosed);
      */

      return 0;
}

'Programming Languages > C' 카테고리의 다른 글

가변 인자 함수 1  (0) 2010.08.31
포인터 다루기  (0) 2010.04.08
재귀 함수  (0) 2010.03.09
fflush.c  (0) 2010.01.12
char_IO.c  (0) 2010.01.12
Posted by 독뽀
,

1. public static void main(String args[])

위의 main method 원형은 꼭 외워두도록 하자.
개발툴에서 자동으로 만들어주기도 하지만 한줄정도야 외워주도록 하자;

2. public과 static은 순서가 바뀌어도 상관이 없다.

하지만! 역시나 Tutorials에서는 관례적으로 public static의 순서를 지키기를 권고한다.

3. Exception in thread "main" java.lang.NoClassDefFoundError:
HelloWorld.java.


위와 같은 에러가 났다면 무엇이 문제일까?
에러 내용은 classpath(클래스 경로)가 잘못되었다는 것이다.

HelloWorld를 실행하는데 문제가 발견되었다면 아래를 참고하기 바란다.

Windows 환경에서 javac를 사용하기 위해서는 환경 변수 등록이 되어있어야 어느 경로에서든지 실행가능하다.
xp에서는 내 컴퓨터>등록정보>고급>환경 변수
windows7에서는 윈도우탐색기>컴퓨터>등록정보>고급 시스템 설정>환경 변수
(참고: xp, 7 공통 단축키 <시작키>+<Pause Break>)



시스템 변수(S) 아래의 Path를 더블클릭 혹은 편집(I)을 선택한다.



위 스크린샷에는 짤렸지만 ;C:\Program Files\Java\jdk1.6.0_18\bin; 라고 되어있다.
jdk버전\bin 폴더에 javac.exe와 java.exe가 있기 때문에..
;(세미콜론)은 시스템 변수 값들을 구분하기 위한 구분자이다.. 자세히 알 필요는 없다.
본인이 설치한 jdk에 맞게 설정해야한다. 무작정 위와 같이 하면 안되니 주의!

'Programming Languages > Java' 카테고리의 다른 글

변수(1)  (0) 2010.04.27
자바 필수 상식 (2) - Object-Oriented Programming  (0) 2010.03.21
Hello World!  (0) 2010.03.13
EditPlus에서 Java 컴파일, 실행하기  (0) 2010.03.09
개발 환경 설정  (0) 2010.03.09
Posted by 독뽀
,

어떤 프로그래밍 언어든 간에 일단 찍고 보는 것이 헬로월드;
남들 하는거 다 따라갈 필요는 없어도 가장 보편적인 접근이니 여기서도..

 /**
  HelloWorld.java
 */

 public class HelloWorld {
       public static void main(String[] args) {
               System.out.println("Hello World!");
       }
 }





 public class HelloWorld {
       public static void main(String[] args) {
               System.out.println("Hello World!");
       }
 }

파일명과 동일하게 한다.(대소문자 구분!)
클래스 이름을 작성.

 public class HelloWorld {
       public static void main(String[] args) {
               System.out.println("Hello World!");
       }
 }

모든 java application은 main method를 가지고 있어야한다.
String[] args는 명령 인수(command-line argument)를 받을 때 사용한다.
물론 실행 시 명령 인수를 입력하지 않으면 무시.
args는 String형 변수명인데 아무거나 써도 상관은 없다.
하지만 Tutorials을 보면 대부분의 프로그래머가 args나 argv를 선호한다고 한다.

 public class HelloWorld {
       public static void main(String[] args) {
               System.out.println("Hello World!");
       }
 }

여길 보면 .(dot)이 많이 찍혀있는데 이것은 클래스의 라이브러리를 참조할 때 사용한다.
System은 java의 core library(핵심 라이브러리)에 있는 클래스이다.
standard output을 통해 출력을 하기 위해 사용되었다.

이 라이브러리들은 모두 Application Programming Interface(API)에 포함되어 있는데
우리가 설치한 JDK에 포함된 API들이다.
자세한 내용은 지금 봐도 별 도움 안된다. 나중에 보기로 하자!

Java는 Java Virtual Machine(JVM)과 Bytecode란 녀석때문에 platform-independent(플랫폼 독립적)이다.
Bytecode는 Java파일을 컴파일 했을 때 JVM이 읽을 수 있는 언어로 되어있다.
이 Bytecode와 JVM이 있으면 어느 platform(혹은 OS)에서도 실행될 수 있다.
그렇기에 이 개념은 매우 중요하다!

작성한 자바 파일을 실행하기 위해서는 바이트코드 형태로 컴파일 한 후 JVM에서 실행하면 된다.
IDE(통합개발환경) 툴이 없을 경우 명령 프롬프트에서 javac 파일명.java 를 하면 컴파일 된다.(대소문자 반드시 일치)
성공적으로 컴파일이 되면 파일명.class 파일이 생기며 이를 실행할 때는 java 파일명(확장자 없다.)을 하면 된다.

'Programming Languages > Java' 카테고리의 다른 글

변수(1)  (0) 2010.04.27
자바 필수 상식 (2) - Object-Oriented Programming  (0) 2010.03.21
자바 필수 상식 (1) - Some questions  (0) 2010.03.13
EditPlus에서 Java 컴파일, 실행하기  (0) 2010.03.09
개발 환경 설정  (0) 2010.03.09
Posted by 독뽀
,


일단 에디트 플러스 실행..


그림에서 보이는 사용자 도구 구성(C)... 클릭!



추가(D) >> 프로그램(P) 클릭!



메뉴제목: JavaCompiler (원하는 이름 입력)
명령(O): javac (컴파일하는 명령)
인수(E): ▼ 누르고 파일 이름 선택
디렉토리(I): ▼ 누르고 파일 디렉토리 선택

적용(A) 누르고 또 추가(D) >> 프로그램(P) 클릭!

다음과 같이 다시 입력
메뉴제목: JavaRun
명령(O): java (실행하는 명령)
인수(E): ▼ 누르고 확장자를 뺀 파일 이름 선택
디렉토리(I): ▼ 누르고 파일 디렉토리 선택

이제 확인하면 끝~

기본적으로 단축키가 Ctrl+1(컴파일), Ctrl+2(실행)으로 저장된다.

(추가) 위의 두 과정에서 출력 내용 캡쳐(U)에 모두 체크하게 되면 콘솔창(도스 창) 또한 에디트 플러스 내에서 확인 가능하다!

'Programming Languages > Java' 카테고리의 다른 글

변수(1)  (0) 2010.04.27
자바 필수 상식 (2) - Object-Oriented Programming  (0) 2010.03.21
자바 필수 상식 (1) - Some questions  (0) 2010.03.13
Hello World!  (0) 2010.03.13
개발 환경 설정  (0) 2010.03.09
Posted by 독뽀
,

java 기본만 보고 안본게 대략 4년 전인것 같다..
그래서 다시 공부하기 위해서 The Java™ Tutorials을 번역/요약해서 올릴 계획이다.


자바 개발 환경에 필요한 것들..
JRE(Java Run-time Environment)
JDK(Java Development Kit)
개발 툴(Eclipse나 Netbeans)

JRE는 굳이 자바 개발을 하지 않더라도 무수히 쓰이는 웹페이지들의 애플릿을 위해 필요하다.
자바로 생성된 클래스 파일이 실행되기 위한 VM(Virtual Machine)이 설치된다.
어거지로 비교하자면 플래쉬 파일을 만들 땐 플래쉬 프로그램이 필요하지만
단순히 보기 위해서는 플래쉬 플레이어만 있어도 되는 것과 같은 이치이다.

JDK는 자바 개발을 위한 도구들이 담겨있다.
도구라고 해서 특별히 따로 코드 에디터나 프로젝트 매니저까지 제공하는 것은 아니다.
텍스트 편집기(메모장이나 vi, gedit 등)에서 작성하고 콘솔 상에서 javac, java 등을 해도 되지만

귀찮지 않은가!?

그래서 사용하는 것이 Eclipse나 Netbeans이다.

Eclipse는 Eclipse에서 제공하는 무료 개발 툴이다. 무료 치고는 자체 기능이나
추가 플러그인 등이 워낙 막강해서 통합개발환경(IDE)이라고 부르는 사람들도 꽤 있다. Eclipse 다운로드

Netbeans는 java를 만든 Sun사에서 제공하기 시작한 오픈소스 개발 툴이다. Netbeans 다운로드
Netbeans는 코딩의 편의에 많은 비중을 둔 반면 Eclipse는 플러그인이나 프로젝트급에 어울린다.

굳이 어느 하나를 추천하기보다는 맘에 드는것을 골라 쓰라고 추천하고싶다.

Eclipse는 종류가 많은데..
갓 공부를 시작하는 사람이라면 가장 용량이 적은 Eclipse IDE for Java Developer면 충분하다.
개발 툴들은 그냥 원하는 위치에 압축을 푼 후 eclipse.exe 실행만으로 설치 없이 시작이 가능하다.

컴파일을 하기 위해 윈도우에서는 C:\~java경로~/jdk-version/bin 폴더를 환경 변수에 추가해야한다.
환경 변수 추가는 다음 링크를 참조하기 바란다. http://asgawa.tistory.com/entry/필수-자바-교양 

리눅스에서는 터미널에서 jdk 다운로드 후(.bin 파일이라서 우분투, 데비안에서는 sh 명령어로 강제 실행!)
압축이 풀어진 후엔 sudo update-alternatives --config java

개발 툴을 쓰지 않고 "나는 곧 죽어도 메모장처럼 가벼운 환경에서 코딩하고 콘솔로 컴파일하고 실행할거야!"
라고 외치는 사들을을 위해 다음엔 EditPlus에서 자바 컴파일&실행 하는 법을 알아보겠다.

참고로 자바 튜토리얼의 언어 기본(Language Basics) 목록은 다음과 같다.

 Language Basics
  Variables
    Primitive Data Types
    Arrays
    Summary of Variables
  Questions and Exercises
  Operators
    Assignment, Arithmetic, and Unary Operators
    Equality, Relational, and Conditional Operators
    Bitwise and Bit Shift Operators
    Summary of Operators
  Questions and Exercises
  Expressions, Statements, and Blocks
  Questions and Exercises
  Control Flow Statements
    The if-then and if-then-else Statements
    The switch Statement
    The while and do-while Statements
    The for Statement
    Branching Statements
    Summary of Control Flow Statements
  Questions and Exercises




에디트 플러스에서 자바 컴파일 & 실행하기

'Programming Languages > Java' 카테고리의 다른 글

변수(1)  (0) 2010.04.27
자바 필수 상식 (2) - Object-Oriented Programming  (0) 2010.03.21
자바 필수 상식 (1) - Some questions  (0) 2010.03.13
Hello World!  (0) 2010.03.13
EditPlus에서 Java 컴파일, 실행하기  (0) 2010.03.09
Posted by 독뽀
,

재귀란 반복, 다시 돌아온다는 의미이다.(recursive)

스택을 구현하기 위한 방법에는 어떤 것들이 있을까?
여러 방법들이 있겠지만 일시적으로 스택 구조만를 사용하기 위한 경우라면
재귀적 함수 호출을 사용해보자.

재귀적 함수 호출의 흐름을 생각해보자.

a라는 함수가 있다.
이 함수 내에서 a라는 함수 자기 자신을 또 호출한다.
그러면 a라는 함수는 자기 자신을 호출한 시점에서 자기 자신을 호출한다.

메모리 공간에서 실제로 동일한 함수 공간이 만들어지고 작업 영역이 그 곳으로 옮겨지는 것이다.

그렇다면 나머지 내용은?

당연한 결과겠지만 그 새로운 공간에서의 작업이 끝남과 동시에 그 공간을 반환한 뒤 처리된다.
이 말은 반복문을 굳이 사용하지 않아도 Loop 형태를 띌 수 있음을 의미함과 동시에
무한 루프에 빠질 수도 있다는 뜻이다.

참고 : 쿨 프로그래밍
http://blog.daum.net/_blog/BlogView.do?blogid=0Nu8o&articleno=33&categoryId=1#ajax_history_home

'Programming Languages > C' 카테고리의 다른 글

가변 인자 함수 1  (0) 2010.08.31
포인터 다루기  (0) 2010.04.08
파일 입/출력  (0) 2010.03.14
fflush.c  (0) 2010.01.12
char_IO.c  (0) 2010.01.12
Posted by 독뽀
,

fflush.c

Programming Languages/C 2010. 1. 12. 16:21

/************************************************************/
/* fflush(FILE * stream) 버퍼를 비우는 기능                             */
/* stream = stdout일 경우 버퍼의 내용을 지우는 것이 아니라       */
/* 지정한 스트림으로 fflush 호출 시 보내라는 의미                     */
/* stream = stdin일 경우는 버퍼의 내용을 지우는 것                   */
/************************************************************/
#include <stdio.h>

int main(void) {
    char perID[7];
    char name[10];

    fputs("주민번호 앞 6자리를 입력하세요 : ", stdout);
    fgets(perID, sizeof(perID), stdin);

    fflush(stdin); // 입력 버퍼를 비운다.
    // 처음 입력 fputs에서 123456-1234567 을 입력했을 때 -1234567은 버퍼에 남게 된다.
    // 그래서 버퍼를 비운다. 비우지 않으면 당연히 그 값도 출력된다.
    fputs("이름을 입력하세요 : ", stdout);
    fgets(name, sizeof(name), stdin);

    printf("주민번호 앞자리 : %s \n", perID);
    printf("이           름 : %s \n", name);

    return 0;
}

'Programming Languages > C' 카테고리의 다른 글

가변 인자 함수 1  (0) 2010.08.31
포인터 다루기  (0) 2010.04.08
파일 입/출력  (0) 2010.03.14
재귀 함수  (0) 2010.03.09
char_IO.c  (0) 2010.01.12
Posted by 독뽀
,

char_IO.c

Programming Languages/C 2010. 1. 12. 16:18

/********************************************************/
/* 문자(열)을 입력받아 그대로 출력                                   */
/* 주석 처리된 내용은 현재의 내용과 완전히 동일                */
/* getchar, putchar -> 스트림이 이미 지정되어있음 (콘솔)   */
/* fgetc, fputc -> 스트림을 직접 지정(콘솔 - stdin, stdout)   */
/*******************************************************/

#include <stdio.h>

int main(void) {
    char ch=0;
    while(ch != 'q') {
        //ch=getchar();
        ch=fgetc(stdin);
        //putchar(ch);
        fputc(ch, stdout);
        printf("%d ", 1); // 루프가 몇 번 되었는지 확인
    }
return 0;
}

'Programming Languages > C' 카테고리의 다른 글

가변 인자 함수 1  (0) 2010.08.31
포인터 다루기  (0) 2010.04.08
파일 입/출력  (0) 2010.03.14
재귀 함수  (0) 2010.03.09
fflush.c  (0) 2010.01.12
Posted by 독뽀
,