336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
목표 : 

파일을 특정 영역에 생성하여 문자열로 기록한 다음 다시 읽어 들여 화면에 표시해보자.


소스 코드 : main.c
#include <stdio.h>

void main(void)
{
FILE *write = 0;
FILE *read = 0;
char szBuffer[256] = { 0, };

fopen_s(&write, "E:\\300\\107\\file.txt", "w+");

if (write == NULL)
{
puts("file 생성을 할수 없습니다.");
}
else
{
puts("file 생성 성공");
puts("--------------");
fputs("create file \n", write);
fclose(write);
}


fopen_s(&read, "E:\\300\\107\\file.txt", "r");

if (read == NULL)
{
puts("file 읽기 실패");
}
else
{

fgets(szBuffer, 256, read); // 256은 버퍼의 최대 크기 입니다.

puts("file에서 읽은 내용입니다.");
puts(szBuffer);
fclose(read);
}

}



결과



#fputs, #fgets, #파일읽고쓰기



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

목표 : 

문자한개씩 기록하고 이기록한 코드를 출력하는 프로그램을 만들어보고 실재 있는지도 확인한다.



소스코드 : main.c

#include <stdio.h>


void main(void)

{

FILE *pText = NULL;

int count = 0;

int temp = 0;


fopen_s(&pText, "c:\\example\\Text.txt", "w+"); // 모드 w+를 없으면 만들어서 써라입니다. w 는 그냥 쓰기모드입니다



if (pText == NULL)

{

puts("text 파일 생성 실패");

}

else

{

puts("text 파일 생성 성공");


//문자 하나씩 기록

fputc('L', pText);

fputc('e', pText);

fputc('e', pText);

fputc('J', pText);

fputc('u', pText);

fputc('n', pText);

fputc('M', pText);

fputc('o', pText);

fputc('\n', pText);//개행문자


  //다썻으니 한번 닫어줍니다.

fclose(pText);


// 다시 읽어들여서 반복문을 통해서 콘솔창에 출력을 해봅니다.

fopen_s(&pText, "c:\\example\\Text.txt", "r"); // 모드를 r로 해줍니다. read의 약자이겠지요


while (count < 9)

{

temp = fgetc(pText);

putchar(temp);

count++;

}


fclose(pText);//당연히 열었으니 닫아줍니다.

}


}




결과





 #c언어, #c언어입문, #프로그램입문, #한문자씩읽고쓰기,#fgetc,#fputc

 



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. 보조기억장치에 파일을 생성합니다.


2. 경로가 잘못되거나 없으면 생성에 실패 합니다.




목표 : 


text 파일과 xml 파일을 만들어 봅니다.




준비 : 


c:\\example 폴더를 만들어 줍니다.




소스코드 : main.c

#include <stdio.h>


void main(void)

{

FILE *pText = NULL;

FILE *pXML = NULL;


fopen_s(&pText, "c:\\example\\Text.txt", "w+");

fopen_s(&pXML, "c:\\example\\XML.xml", "w+");


if (pText == NULL)

{

puts("text 파일 생성 실패");

}

else

{

puts("text 파일 생성 성공");

}


if (pXML == NULL)

{

puts("XML 파일 생성 실패");

}

else

{

puts("XML 파일 생성 성공");

}

}




결과 : 



미리 만들어 놓은 폴더로 가서 확인한다.




파일이 생성 된 것을 확인할수 있습니다.




 #c언어, #c언어입문, #프로그램입문, #fopen_s, #파일생성

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 

1. 함수를 가르키는 특수한 함수

2. 함수이름자체도 주소값을 가지고있다.

3. 반환형태와 매계변수를 같게 하고  (*이름) 형식으로 만들수 있다.


목표 : 

기존 소스를 활용하여 Process 함수를 FunctionPointer 함수로 가르키고 하고 사용해본다.


소스코드 : main.c

#include <stdio.h>

#define MAX 256

#define type_String (unsigned char)0

#define type_Integer (unsigned char)1


struct tagStruct1

{

unsigned char type;

unsigned char szBuffer[MAX];

};


struct tagStruct2

{

char type;

int nNumber;

};


void Process(void *); // 포로토 타입 선언


void main(void)

{

//< 함수 포인터 추가

void(*FunctionPointer)(void*);


FunctionPointer = Process;//함수포인터 값 대입


 //< 데이터를 선언

struct tagStruct1 Data1;

struct tagStruct2 Data2;


//Data1 정의

Data1.type = type_String;

sprintf_s(Data1.szBuffer, sizeof(Data1.szBuffer), " Type1의 데이터 입니다. 어떠한 문자열을이든 저장할수 있겠군요.");


//Data2 정의

Data2.type = type_Integer;

Data2.nNumber = 38;


void *pInput = (void*)&Data1;


FunctionPointer(pInput);


pInput = (void*)&Data2;


FunctionPointer(pInput);


return;

}


void Process(void* pData)

{

unsigned char type = *(char*)pData;


switch (type)

{

case type_String:

puts(" tagSturct1 식별 ");

puts(((struct tagStruct1*)pData)->szBuffer);

puts("");

break;


case type_Integer:

puts(" tagSturct2 식별 ");

printf("정수 출력 : %d \n\n", ((struct tagStruct2*)pData)->nNumber);

break;


default:

break;

}

}



결과 :



#c언어, #c언어입문, #프로그램입문, #함수포인터


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. 무엇이든 가르킬수 있는 포인터


2. void 형으로는 사용할수 없으므로 항상 형변환을 화여 사용하여 줍니다.




목표 : 


매개 변수로 void 형과 타입을 받아 앞에 1바이트를 읽어 들이고 식별하여 상황에 맞게 움직이는 포인터를 만들어 보자




소스코드 : 

#include <stdio.h>

#define MAX 256

#define type_String (unsigned char)0

#define type_Integer (unsigned char)1


struct tagStruct1

{

unsigned char type;

unsigned char szBuffer[MAX];

};


struct tagStruct2

{

char type;

int nNumber;

};


void Process(void *); // 포로토 타입 선언


void main(void)

{

//< 데이터를 선언

struct tagStruct1 Data1;

struct tagStruct2 Data2;


//Data1 정의

Data1.type = type_String;

sprintf_s(Data1.szBuffer, sizeof(Data1.szBuffer), " Type1의 데이터 입니다. 어떠한 문자열을이든 저장할수 있겠군요.");


//Data2 정의

Data2.type = type_Integer;

Data2.nNumber = 38;


void *pInput = (void*)&Data1;


Process(pInput);


pInput = (void*)&Data2;


Process(pInput);


return;

}


void Process(void* pData)

{

unsigned char type = *(char*)pData;


switch (type)

{

case type_String:

puts(" tagSturct1 식별 ");

puts(((struct tagStruct1*)pData)->szBuffer);

puts("");

break;


case type_Integer:

puts(" tagSturct2 식별 ");

printf("정수 출력 : %d \n\n", ((struct tagStruct2*)pData)->nNumber);

break;


default:

break;

}

}



결과 



#c언어, #c언어입문, #프로그램입문, #void포인터


'Programing - C > C Basic grammar ' 카테고리의 다른 글

105 fopen(파일생성)  (0) 2017.08.10
104 함수 포인터  (0) 2017.08.07
102 구조체를동적할당해서포인터로사용해보기  (0) 2017.08.07
101 구조체(struct)  (0) 2017.08.07
100 다차원 배열  (0) 2017.08.04
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 :


동적할당이나 포인터로 참조할때는 접근 법이 닷에서 지시연산자로 바뀝니다.



목표 : 


예제101 소스를 정적할당에서 동적할당으로 변경하여 사용하기




소스코드 : main.c

#include <stdio.h>

#include <malloc.h>

struct  tagStudentScor

{

int kor;

int eng;

int math;


char szName[256];

};


int main(void)

{

struct tagStudentScor* pPage = NULL;

//메모리를 블럭으로 생성하고 초기화하는 함수호출 

pPage = calloc(sizeof(struct tagStudentScor), sizeof(struct tagStudentScor));


sprintf_s(pPage->szName, sizeof(pPage->szName), "LeeJunmo\0");

pPage->kor = 100;

pPage->eng = 100;

pPage->math = 100;


printf("성적카드 출력\n");

printf("이름 : %s \n", pPage->szName);

printf("국어 : %d \n", pPage->kor);

printf("영어 : %d \n", pPage->eng);

printf("수학 : %d \n", pPage->math);


free(pPage);


return 0;

}


결과



#구조체를동적할당해서포인터로사용해보기,#c언어, #c언어입문, #프로그램입문



'Programing - C > C Basic grammar ' 카테고리의 다른 글

104 함수 포인터  (0) 2017.08.07
103 void Pointer  (0) 2017.08.07
101 구조체(struct)  (0) 2017.08.07
100 다차원 배열  (0) 2017.08.04
099 포인터 배열  (0) 2017.08.04
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 :


1. 사용자 정의 자료형


2. 기본 자료형을 활용하여 사용자가 원하는 자료형을 만들수 있습니다.





목표 : 


성적표 구조체를 만들어 본다.






소스코드 : main.c

#include <stdio.h>

//구조체 정의

struct  tagStudentScor

{

int kor;

int eng;

int math;


char szName[256];

};


int main(void)

{

//선언

struct tagStudentScor stPage;

//접근 및 사용

sprintf_s(stPage.szName, sizeof(stPage.szName), "LeeJunmo\0");

stPage.kor = 100;

stPage.eng = 100;

stPage.math = 100;


printf("성적카드 출력\n");

printf("이름 : %s \n", stPage.szName);

printf("국어 : %d \n", stPage.kor);

printf("영어 : %d \n", stPage.eng);

printf("수학 : %d \n", stPage.math);


return 0;

}





결과



#c언어, #c언어입문, #프로그램입문, #구조체, #struct


'Programing - C > C Basic grammar ' 카테고리의 다른 글

103 void Pointer  (0) 2017.08.07
102 구조체를동적할당해서포인터로사용해보기  (0) 2017.08.07
100 다차원 배열  (0) 2017.08.04
099 포인터 배열  (0) 2017.08.04
098 Call by Reference & Call by Value  (0) 2017.08.04
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념:


1. 물리적으로는 한줄로 된 배열입니다(정적 할당시)


2. 1차원 배열과는 다르게 상황에 맞게 할당하여 사용하면 생각보다 매우 편리합니다.


3. 선언법은 꺽쇠가로로 만들수있습니다.


ex) 2차원 배열


array[10][10] // 10개의 공간


ex) 3차원 배열


array[10][10][10] //100개의 공간



소스 코드 : main.c

#include <stdio.h>


#define KOR 0

#define ENG 1

#define MATH 2

#define MAJOR_MAX 3


#define JUNMO 0

#define GILDONG 1

#define AMUGEA 2


#define STUDENT_INDEX_MAX 3


int main(void)

{


int major = 0;

int student = 0;


int ScoreBoard[STUDENT_INDEX_MAX][MAJOR_MAX] = { 0, };//전부 0으로 초기화


 // 0 번째 학생의 성적을 정리한다.

ScoreBoard[JUNMO][KOR] = 80;

ScoreBoard[JUNMO][ENG] = 92;

ScoreBoard[JUNMO][MATH] = 88;


// 1 번째 학생의 성적을 정리한다.

ScoreBoard[GILDONG][KOR] = 70;

ScoreBoard[GILDONG][ENG] = 82;

ScoreBoard[GILDONG][MATH] = 68;


// 2 번째 학생의 성적을 정리한다.

ScoreBoard[AMUGEA][KOR] = 100;

ScoreBoard[AMUGEA][ENG] = 70;

ScoreBoard[AMUGEA][MATH] = 30;


for (student = 0; student < STUDENT_INDEX_MAX; student++)

{

for (major = 0; major < MAJOR_MAX; major++)

{

printf("ScoreBoard[%d][%d] = %d\n", student, major, ScoreBoard[student][major]);

}

puts("");// 개행을 위해서 한번 호출

}


return 0;


}



결과


#c언어, #c언어입문, #프로그램입문, #다차원배열


'Programing - C > C Basic grammar ' 카테고리의 다른 글

102 구조체를동적할당해서포인터로사용해보기  (0) 2017.08.07
101 구조체(struct)  (0) 2017.08.07
099 포인터 배열  (0) 2017.08.04
098 Call by Reference & Call by Value  (0) 2017.08.04
097 포인터 개념  (0) 2017.08.04
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


포인터를 저장하는 배열



목표 : 


배열을 선언해보고 사용해봅니다.



소스코드 : main.c

#include <stdio.h>


int main(void)

{

char *pStirng1 = "Hello All \n";

char *pString2 = "My name is Junmo \n";

char *pString3 = "Nice to meet you \n";


int count = 0;


char *pStringSet[3] = { pStirng1, pString2, pString3 };


for (count = 0; count < 3;count++)

{

printf("%s", pStringSet[count]);

}


return 0;

}



결과 : 



#c언어, #c언어입문, #프로그램입문, #배열포인터


'Programing - C > C Basic grammar ' 카테고리의 다른 글

101 구조체(struct)  (0) 2017.08.07
100 다차원 배열  (0) 2017.08.04
098 Call by Reference & Call by Value  (0) 2017.08.04
097 포인터 개념  (0) 2017.08.04
096 memset  (0) 2017.08.04
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


call by reference : 참조 형태로 주소값을 부르는 형태를 일컫습니다. 정확하고 명료하게는 call by address라고도 합니다.


이것을 명확히 구분하자는 분도 있고 그냥 한꺼번에 call by reference 로 부르자는 분들이 존재 합니다 ..


저의 입장은 그냥 중립입니다. 무엇이 되었든 상황에 맞게 사용하고 부르는 것이 맞아요.




call by value : 순수 값에 의한 참조를 뜻합니다.


이둘의 차이점은 수정되었을시 원본에 대한 영향력이 있다 없다로 구분 습니다.

 



소스코드 : main.c

#include <stdio.h>


void CallByReference(int *pReference, int nCanged);

void CallByValue(int nValue, int nCanged);


int main(void)

{

int value1 = 3;

int value2 = 13;


printf("source1 : %d\n", value1);

printf("source2 : %d\n", value2);


CallByReference(&value1, 8);

CallByValue(value2, 1000);



printf("source1 : %d\n", value1);

printf("source2 : %d\n", value2);

return 0;

}


void CallByReference(int *pReference, int nCanged)

{

puts("Call By Reference");

*pReference = nCanged;

printf("Dest : %d\n", *pReference);

}


void CallByValue(int nValue, int nChanged)

{

puts("Call By Value");

nValue = nChanged;

printf("Dest : %d\n", nValue);

}



결과



 #c언어, #c언어입문, #프로그램입문, #CallByReference,#callByValue,#포인터개념

 

'Programing - C > C Basic grammar ' 카테고리의 다른 글

100 다차원 배열  (0) 2017.08.04
099 포인터 배열  (0) 2017.08.04
097 포인터 개념  (0) 2017.08.04
096 memset  (0) 2017.08.04
095 memmove_s  (0) 2017.07.28

+ Recent posts