8개의 값(점수)을 받아야 한다고 가정하에 직접 받으면 이렇게 노가다를 해야합니다
#include <stdio.h>
main() {
int a1,a2,a3,a4,a5,a6,a7,a8;
int hap;
scanf("%d %d %d %d %d %d %d %d",
&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8);
hap=a1+a2+a3+a4+a5+a6+a7+a8;
printf("hap = %d\n",hap);
}
간단하게 배열을 이용하여 만들면
main() {
int a[8];
int hap=0;
scanf("%d",a+0);
scanf("%d",a+1);
scanf("%d",a+2);
scanf("%d",a+3);
scanf("%d",a+4);
scanf("%d",a+5);
scanf("%d",a+6);
scanf("%d",a+7);
hap=a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7];
printf("hap = %d\n",hap);
달라진게..없는데?...
for문을 이용하면 좀더 간단해집니다
#include <stdio.h>
main() {
int a[8];
int hap=0;
int i;
for(i=0;i<8;i++)
scanf("%d",a+i);
//scanf("%d",&a[i]);
for(i=0;i<8;i++)
hap=hap+a[i];
printf("hap = %d\n",hap);
}
이렇게 보기엔 더 복잡해진 것같은데
저장해야하는 수가 8이였다가 5였다가 9였다가 수정을 하기 편해집니다
아래 코드처럼
#include <stdio.h>
#define N 10
main() {
int a[N];
int hap=0;
int i;
for(i=0;i<N;i++)
scanf("%d",a+i);
//scanf("%d",&a[i]);
for(i=0;i<N;i++)
hap=hap+a[i];
printf("hap = %d\n",hap);
}
지금은 한가지의 데이터(점수)을 받았는데 A의 수학점수,국어점수,이름과 같이
각 다른 데이터형을 저장하기 위해서 구조체를 사용합니다.
구조체에 관해서는 2가지 알아두셔야 할 것이 있습니다. 하나는 틀을 만드는 방법이고, 또 다른 하나는 이를 기억공간에 만드는 방법입니다. 우선 틀을 만드시는 방법은 다음과 같습니다.
struct 태그명 {
변수 ;
변수 ;
:
};
위에서 태그명은 기억공간의 이름만드는 방법과 동일합니다. 예를 들어 다음과 같은 구조체의 틀을 만들 수가 있습니다.
struct ABC {
int 정수;
float 실수; //이해하기 편하게 한글코딩으로합니다
};
위에서 "정수"라는 이름의 정수형 기억공간과
"실수"라는 이름의 실수값을 담을 수 있는
실수형 기억공간을 ABC라는 이름으로 하나의 구조를 만들 었구요.
위의 작성은 '이러한 구조를 만들겠다' 라는 정의에 지나지 않습니다.
메모리에 실제적인 기억공간으로 만드시려면 다음과 같이 함수내에서 선언해 주셔야 한답니다.
#include <stdio.h>
struct ABC {
int 정수;
float 실수;
};
main() {
struct ABC kbs;
}
위에서 보시는 바와 같이 선언하시는 방법은
struct 태그명 이름;
따라서 위의 프로그램과 같이 struct ABC kbs; 라고 해주시면, 그때서야 kbs 라는 이름으로 ABC 라는 이름의 구조가 기억될 수 있도록 기억공간을 만드는 겁니다. 다음의 그림과 같이 말이죠.
값을 저장하고 읽어내는 방법은
태그명.변수명 = 값;
변수 = 태그명.변수명;
#include <stdio.h>
struct ABC {
int jung;//정수
float sil;//실수
};
main() {
struct ABC test;
test.jung = 14;
test.sil = 105.72;
printf("%d %6.2f\n",test.jung,test.sil);
}
어 그럼 구조체 안에도 배열을 넣을 수 있으려나?
하고 하나를 만들어 봤는데
#include <stdio.h>
#include <string.h>
struct peopledata {
int no;
char name[10];
int age;
char juso[20];
};
main() {
struct peopledata my;
my.no=1;
my.name="갓도히";
my.age=102;
strcpy(my.juso,"행복행");
printf("%d %s %d %s\n",
my.no,my.name,my.age,my.juso);
}
이대로 돌리면 만약 에러가 날 것인데요
그이유는....
name="갓도히" 부분에
한번에 배열값을 넣을 수 가 없기에
my.name[0]="갓";
my.name[1]="도";
my.name[2]="히";
my.name[3]="\0";
이렇게 진행 해야하는데 너무너무 귀찮죠
라이브러리를 사용할 예정입니다
#include <string.h>
strcpy(my.name,"갓도히");
#include <stdio.h>
#include <string.h>
struct peopledata {
int no;
char name[10];
int age;
char juso[20];
};
main() {
struct peopledata my;
my.no=1;
//my.name="갓도히";
strcpy(my.name,"갓도히");
my.age=102;
strcpy(my.juso,"행복행");
printf("%d %s %d %s\n",
my.no,my.name,my.age,my.juso);
}
어.. 그럼 한번에 하나하나 저장할떄도 저렇게 해야하나..
한번에 저장하는 코드(배열로)를보고 마무리 하도록 하겠습니다
#include <stdio.h>
struct peopledata {
int no;
char name[10]; //한글이름은 2바이트씩 먹기때문에 넉넉하게 잡아준다 (\0값도 포함해서)
char gender;
int age;
float sinjang;
char juso[20];
};
//name[10]은 한글이름이 4글자까지있을것이라고 예상해서 4*2 +1(\0값) 9이상인 10으로 지정
main() {
struct peopledata dat[8] = { {1,"갓도히",'m',24,180.5,"사랑동"},
{2,"도히쿤",'w',15,165.4,"행복동"},
{3,"도히상",'m',18,170.7,"미치동"},
{4,"소도히",'m',22,185.2,"게도동"},
{5,"왕도히",'w',20,160.2,"보고동"},
{6,"도히스",'m',32,177.7,"싶은동"},
{7,"도도히",'m',33,168.4,"사람원"},
{8,"히도히",'w',18,164.2,"도히동"} };
int i;
for(i=0;i<8;i++)
printf("%d %s %c %d %5.1f %s\n",
dat[i].no,dat[i].name,dat[i].gender,
dat[i].age,dat[i].sinjang,dat[i].juso);
}
뭔가 이렇게 응용이 가능해요!
한번 각자 코드를 짜봐서 응용해보시는 것을 추천드려요!
'3.9 기타 개발 > C' 카테고리의 다른 글
[C언어/코드] 지렁이꼬리키우기 게임 (1) | 2023.05.18 |
---|
댓글