저도 이걸로 한참 고민했는데요. 추천수가 많은 댓글이 위에 있어 여기에 글을 써봅니다. 아래 댓글중 얻은 힌트로는 소스파일 저장하실때 확장자에 따른 차이점으로 보입니다. 기본적으로 저장시 C++소스 파일로 저장됩니다.(이럴경우 strcpy에서 문제 발생, #include 을 선언해주어야 정상적으로 컴파일됩니다.) 하지만 동영상에서 처럼(7:02) 따로 SAVE AS를 통해 C소스 파일로 저장해주시면 #include 를 선언해주지 않아도 컴파일되면서 실행되더군요... 두가지의 차이점과 문제점은 따로 알아보러 가야겠습니다. 고수분깨서 대댓글로 달아주시면 감사합니다 ㅠ.ㅠ
c++에서는 stdlib대신 string를 쓰면 strcpy를 사용할 수 있지만 숫자는 달라질 수 있음.구조체 'struct 문자 문자'순의 형식은 처음 문자인 변수를 뒤의 문자로 변환한 것임. 그 다음에 뒤에 썼던 문자. sturct에서 선언한 변수로 변수값 지정가능. math.h안의 sqrt은 제곱근을 구해줌.
지금까지 쭉보다가 약간 내용 외적으로 궁금한게 생겼습니다 ㅎ 다른 함수,제어문 등을 사용하실때는 아래와 같이 작성 하셨습니다. if(i == 0) { // 내용 } 그런데 영상 보다보니 구조체 작성만 아래와 같이 작성 하셨습니다. struct student { int x, y; char name[]; } 그냥 어쩌다가 쓰신건지 아니면 변수 이름 짓기와 같은 현업에서 쓰는 가독성을 위한 암묵적 스탠다드 적인 작성법 인지 알고 싶네요.
네 저도 파이썬유저인데 파이썬은 그게 돼서 정말 편한데 c는 안되는 것 같더라고요 저도 댓글 보고 인터넷 한 번 찾아봤습니다. 근데 int main(void) { char cha = 'b'; printf("%c ", cha); // b출력 cha = 'c'; printf("%c", cha); // c출력 return 0; } 이거는 되긴 하더라고요 이것만 되고 문자열 자체를 =로 받는 것 안되는 것 같습니다.
#include #include struct point { int x; int y; }; int main(void) { struct point p1, p2; int xDiff, yDiff; double distance; printf("p1의 좌표를 입력하시오: "); scanf_s("%d %d", &p1.x, &p1.y); printf("p2의 좌표를 입력하시오: "); scanf_s("%d %d", &p2.x, &p2.y); xDiff = p1.x - p2.x; yDiff = p1.y - p2.y; distance = sqrt((xDiff * xDiff) + (yDiff * yDiff)); printf("두 점 사이의 거리는 %.f 입니다.", distance); return 0; } -----------------------------------------------------------------------경고---------------------------------------------------------------------------- C26451 산술 오버플로: 4 바이트 값의 '*' 연산자를 사용한 다음 결과를 8 바이트 값에 캐스트합니다. 오버플로를 방지하려면 '*' 연산자를 호출하기 전에 더 광범위한 형식에 값을 캐스트합니다(io.2). 대체 이게 왜 뜨는 건가요? 어떻게 해결할 수 있을까요?
//학생 정보 구조체 활용 #include #include struct student { int number; char name[10]; double grade; }; int main(void) { struct student s; printf("학번을 입력하세요:"); scanf("%d", &s.number); printf("이름을 입력하세요:"); scanf("%s", &s.name); printf("학점을 입력하세요:"); scanf("%1f", &s.grade); printf("학번 : %d ", s.number); printf("이름 : %s ", s.name); printf("학점 : %.1f ", s.grade); return 0; } 이렇게 했는데 입력을 다 하고 나면 결과창에 오직 학점만 0.0 값이 출력이 되네요 s.grade 변수를 만들었고 그곳으로 scanf로 데이터를 보냈고 s.grade값을 출력하라고 명령했는 과정에 전혀 문제가 없는데 도대체 왜 이런 오류가 발생하는 걸까요?
#include #include #include struct student { int number; char name[20]; // 배열은 자체적으로 주소의 의미를 가짐. double grade; }; int main(void) { // 구조체란 ? 객체 지향 프로그래밍에서 말하는 class의 모체가 되는 것으로 여러 개의 자료형을 묶어서 // 새로운 자료형을 만들 수 있는 방법입니다. struct student s; // 구조체 student 를 s라는 변수로 만들어줌. printf("학번을 입력하세요 : "); scanf_s("%d", &s.number); printf("이름을 입력하세요 : "); scanf_s("%s", s.name); // 배열은 그 자체로 포인터의 의미를 가지고 있으므로 이미 주소의 의미를 가짐. printf("학점을 입력하세요 : "); scanf_s("%lf", &s.grade); printf("학번 : %d ", s.number); printf("이름 : %s ", s.name); printf("학점 : %.1lf ", s.grade); return 0; } 여기서 scanf_s('%s", s.name);에서 이름을 입력하면 갑자기 프로그램이 조금 렉걸리다가 종료가 되어버립니다. 이유가 무엇일까요 ??
강의력이 정말 좋으셔서 시험 앞두고 한 번에 이해했습니다 감사합니다!
c강의 중에 가장 쉽고 잘가르쳐주시는거같아요 잘들었어요!
20강 까지 듣고 한번 더 듣는 중인데 확실히 이해가 잘되네요 굿
혹시 scanf("%s", s.name); 똑같이 쳤는데 입력 후 처리가 안되시는 분들은 scanf("%s", s.name,10); 이렇게 하시면 될겁니다!
와 이거 몰라서 20분동안 찾았는데 ㅠㅠ 댓글을 않봐서 ,정말 감사합니ㅏ=다!!!!!!!
뒤에 10은 왜 붙이는 건가요?
@@김정현-j1g9y 배열 크기를 의미합니다
name 배열 크기가 10이라 10으로 지정한거구요
@@제이지치 감사합니다
와 ,, 정말 감사합니다 이것때문에 한참 헤맸네요 ㅋㅋ
9:05에서 보면 strcpy문장을 비쥬얼 스튜디오 에서 실행한 결과 정의되어 있지 않는다고 오류가 떳는데 왜그런걸까요?
9:23 에서 strcpy가 정의되지 않아있어서 를 정의해야 저는 실행이 되던데 선생님은 어떻게 가 없는데 실행한 건가요?
저도 이걸로 한참 고민했는데요. 추천수가 많은 댓글이 위에 있어 여기에 글을 써봅니다.
아래 댓글중 얻은 힌트로는 소스파일 저장하실때 확장자에 따른 차이점으로 보입니다.
기본적으로 저장시 C++소스 파일로 저장됩니다.(이럴경우 strcpy에서 문제 발생, #include 을 선언해주어야 정상적으로 컴파일됩니다.)
하지만 동영상에서 처럼(7:02) 따로 SAVE AS를 통해 C소스 파일로 저장해주시면 #include 를 선언해주지 않아도 컴파일되면서 실행되더군요...
두가지의 차이점과 문제점은 따로 알아보러 가야겠습니다. 고수분깨서 대댓글로 달아주시면 감사합니다 ㅠ.ㅠ
@@고-d9w 오호 처음 알았네요
scanf() 함수 오류가 난다면, 코드 최상단에
#define _CRT_SECURE_NO_WARNINGS
추가하면 됩니다!
11:35 에 저만 안되나요? 앞에거랑 똑같이 출력되는데.. 왜그런걸까요?
c++에서는 stdlib대신 string를 쓰면 strcpy를 사용할 수 있지만 숫자는 달라질 수 있음.구조체 'struct 문자 문자'순의 형식은 처음 문자인 변수를 뒤의 문자로 변환한 것임.
그 다음에 뒤에 썼던 문자. sturct에서 선언한 변수로 변수값 지정가능. math.h안의 sqrt은 제곱근을 구해줌.
9:07 strcpy 안될 때 위에 #include 추가해서 하면 되더라구요! 비주얼스튜디오2019 이용 중입니다!
감사합니다ㅠㅠㅠ 어떻게 하는 지 몰라서 쩔쩔매고 있었는데..ㅠㅠ
s.name = "홍길동"
이라 안하고
strcpy(s.name, "홍길동")
이라 하는것엔 무슨 의미가 있나요?
와 감사합니다! 그런데 없어도 실행이 안되는것은 저장방식 때문인가요?!!
#include 라고만 하면 strcpy 함수를 사용하지 못합니다 왜그런건가요? 전 vscode를 사용하고 있습니다. #include 이것을 추가해야 strcpy 함수를 사용할수 있던데.. 이상하네욤 ㅠ
지금까지 쭉보다가 약간 내용 외적으로 궁금한게 생겼습니다 ㅎ
다른 함수,제어문 등을 사용하실때는 아래와 같이 작성 하셨습니다.
if(i == 0)
{
// 내용
}
그런데 영상 보다보니 구조체 작성만 아래와 같이 작성 하셨습니다.
struct student {
int x, y;
char name[];
}
그냥 어쩌다가 쓰신건지 아니면 변수 이름 짓기와 같은 현업에서 쓰는 가독성을 위한 암묵적 스탠다드 적인 작성법 인지 알고 싶네요.
구조체 활용에서는 double 형 파일은 scanf()함수로 받을때 %lf로 받으라고 하셨는데
두 점 사이의 거리에서는 그냥 %f로 받으시더군요
컴파일링 적으로 문제가 없는건가요??
저도 이거 궁금해요 당장 영상에서도 .1f사용하십니다.
strcpy를 사용하는 이유는 무엇인가요?
11:30 #include
#include
struct student{
int number;
char name[10];
double grade;
};
int main(void)
{
struct student s;
printf("학번을 입력하세요 : ");
scanf("%d", &s.number);
printf("이름을 입력하세요 : ");
scanf("%s", s.name);
printf("학점을 입력하세요 : ");
scanf("%lf", &s.grade);
printf("학번 : %d
", s.number);
printf("이름 : %s
", s.name);
printf("학점 : %.1f
", s.grade);
return 0;
}
여기서 scanf가 안되고 바로 학번 20150001
이름 : 홍길동
학점 4.5
라고 나오는데 왜그런거죠
너무 고맙습니다.
학생 정보 구조체 활용 파일 출력하면 자꾸 학생 정보 구조체의 결과값이 출력돼요 ㅠㅠㅠ 20150001, 홍길동, 4.5로 출력이 되는데 왜 그런걸까요.. 코드는 영상 그대로 똑같이 썼는데 그러네요
백엔드 준비중인데 c언어에서 배열포인터까지만 알면된다고 들어서요 구조체 까지 꼭알고 java를 넘어가야 하나요 구조체가 꼭알지않아도되는개념인가요 ????? 진심으로 궁금해서 여쭤봅니다
double로 선언했는데 %d로 입력안받고 %lf로 수정해서 입력받아 사용했는데 이렇게 사용해도 되는건지 모르겠네요,
좌표라는 것이 소수점도 표현해야 한다고 생각하는데 과연 이게 맞는건가요?
강의 잘 보보았습니다
세부내용은 ppt에서 볼수있는거같은데 어디서 받을수있나요??
아님 책이 따로 있나요?
동빈나님 강의 잘 들었습니다! 강의에서 배열은 같은 문자열을 배열시키는 것이고 구조체는 다른 문자열들을 배열시킨다고 말씀하셨는데
그러면은 구조체도 배열처럼 컴퓨터 메모리 상에 일자 형태로 배치되는지 궁금합니다!
마지막 문제 ‘두 점 사이의 거리’ 에서 동빈님과 똑같은 수를 입력하였는데 다른 결과가 나오네요😢
계산기로 해보니 동빈님 결과가 맞는데, 아무리 봐도 코드를 똑같이 작성하였는데
잘못된 결과가 나오니까 이상하네요 ㅜ
저같으신 분들 계신가요?
s.name = "홍길동"
이라 안하고
strcpy(s.name, "홍길동")
이라 하는것엔 무슨 의미가 있나요?
c언어 자체에서는 문자열을 = 로 받는게 안됩니다. 그래서 strcpy를 사용하는거에요.
@@위성률 아
a = "123"
이런것도 안되나요?
파이썬유저라 몰랐네요
네 저도 파이썬유저인데 파이썬은 그게 돼서 정말 편한데 c는 안되는 것 같더라고요 저도 댓글 보고 인터넷 한 번 찾아봤습니다.
근데
int main(void)
{
char cha = 'b';
printf("%c
", cha);
// b출력
cha = 'c';
printf("%c", cha);
// c출력
return 0;
} 이거는 되긴 하더라고요 이것만 되고 문자열 자체를 =로 받는 것 안되는 것 같습니다.
@@위성률 아, 변수 하나에 할당되는 메모리값때문인것으로 이해하겠습니다. 감사합니다!
정주행중 15강/20강 고지가 코앞에.....!
선생님 위 강의에서 사용된 ppt 자료들은 따로 다운받기 힘들겠죠?
#include
#include
struct student {
int number;
char name[10];
double grade;
};
int main(void)
{
struct student s;
s.number =20150001;
strcpy(s.name, "www");
s.grade = 4.5;
printf("학번 : %d
", s.number);
printf("이름 : %s
", s.name);
printf("학점 : %.1f
", s.grade);
return 0;
}
뭐가 잘못된 거죠?
strcpy 에서 빨간줄 뜨는데 뭐가 잘못된건가요 ?? 그대로 따라했는데 ㅠ 식별자 정의가 안됬다고 뜨네요
#include 를 선언하면 strcpy 구현시 #include 는 선언하지않아도 되는건가요??
그리고 예제중에 구조체와 구조체 활용부분에서 두 탭이 함께있으면 두번째탭부분이 첫번째탭부분으로 실행이되는데 원래그런건가요?
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
struct student {
int number;
char name[20];
double grade;
};
int main() {
struct student s;
printf("학번입력 : ");
scanf("%d", &s.number);
printf("이름 입력 : ");
scanf("%s", s.name);
printf("학점 입력 : ");
scanf("%lf", &s.grade);
printf("학번은 : %d
", s.number);
printf("이름은 : %s
", s.name);
printf("학점은 : %lf
", s.grade);
}
이렇게 하고 값을 입력했는데 결과에 이름이 안나오더라고요. 문제가 뭔가요?
C언어로 해킹할수있나요?
네
@@샤샤샤-e9c 어떻게요?
@@nmixx_coffee 익스플로잇 코드짜면 됩니다
좋은강의 정말 감사드립니다 처음코딩접하는데 도움이많이됩니다!
그리고 배우는 중에 의문이생겨서요!, 로 어떻게 strcpy값이 구현된것인가요? 를 쓰면 출력되는것은 확인햇는데 으로는 출력이불가능해서요!
저도이게 궁금해요ㅜ 근데전 stdlib.h 로 구현되긴했는데
#include 하고 실행 했는데 왜 이름이 6487604(뭔 숫자여- -;)로 뜨지? 9:00
주소가 출력된것 같은데요
printf 구문에 %d라고 넣으신거 아녀요?
왜 double형 변수 grade 에 %.lf 값을 넣으면 계속 0.000000값이 출력되나요..? ㅜ
혹시 점 엘에프 입력하신거아닌가용?? 점 일에프입력하셔야대용ㅇㅇㅇ
@@parkercho2342 와 감사합니다 ㅋㅋㅋㅋ
영상 잘 보고있습니다. 혹시 int와 char그리고 double의 차이점이 무엇인가요?
각 자료형의 크기가 달라요.
int는 정수형(0,1,2,3 같은 숫자)
char는 문자(a,b,c,가.나,다,)
double은 소수를 표현(1.2,4.5)
학점 : 4.500000 실행했을때 학점이 이렇게 되는 이유는 뭘까요 ㅠㅠ
.1lf라고 안하고 .lf라고 해서 그런거 아닐까요
printf 하실 때 &.1f 를 입력하셔야 합니다. 플롯 값의 소수점 아래 자리를 첫번째 자리까지만 출력한다는 뜻이죠.
학생 정보 구조체 활용 하는데 '학생 정보 구조체'에서 출력되는 값이 그대로 학번 : 20150000이름: 홍길동 학점:4.500000 이게 나옵니다 소스파일을 새로 만들어도 이러는데 왜이럴까요ㅜㅜㅜㅜㅜㅜ
s.number = 20150001;
strcpy(s.name,"홍길동");
s.grade = 4.5;
를 없애시면 될거에요 늦었지만 도움 됐으면 좋겠네요
저도요 ㅠㅠㅠㅠ 4년전 댓글이지만 혹시 해결하셨나요..ㅋㅋㅋ?
@@shutupdraco 제목 때매 그래요 ㅋㅋ
strcpy에서 오류라고 나오는데 어떻게 해결해야되나요?
저도 저 그대로 하면 오류떠요!!ㅠㅠ 맨위에 #include 이거 추가하면 되긴해요!! 근데 강의에서 보면 선생님은 #include 없이도 오류 안뜨는데 왜그러지 ㅠㅠ
@@도토리-u1e 파일을 cpp로 생성했는지 확인하보세용
#include
#include
struct student {
int number;
char name[10];
double grade;
};
int main(void)
{
struct student s;
printf("학번을 입력하세요 : ");
scanf("%d", &s.number);
printf("이름을 입력하세요 : ");
scanf("%s", s.name,10);
printf("성적을 입력하세요 : ");
scanf("%1f", &s.grade);
printf("학번 : %d
", s.number);
printf("이름 : %s
", s.name);
printf("성적 : %.1f
", s.grade);
return 0;
}
이렇게 했는데 grade가 계속 0.0.이 나옵니다 고수님들 한번만 알려주세요ㅠ
scanf()함수에서 입력값 받을때 %1f가 아닌 %lf 로 써야 하는거 같습니다.
#include
#include
struct point {
int x;
int y;
};
int main(void)
{
struct point p1, p2;
int xDiff, yDiff;
double distance;
printf("p1의 좌표를 입력하시오: ");
scanf_s("%d %d", &p1.x, &p1.y);
printf("p2의 좌표를 입력하시오: ");
scanf_s("%d %d", &p2.x, &p2.y);
xDiff = p1.x - p2.x;
yDiff = p1.y - p2.y;
distance = sqrt((xDiff * xDiff) + (yDiff * yDiff));
printf("두 점 사이의 거리는 %.f 입니다.", distance);
return 0;
}
-----------------------------------------------------------------------경고----------------------------------------------------------------------------
C26451 산술 오버플로: 4 바이트 값의 '*' 연산자를 사용한 다음 결과를 8 바이트 값에 캐스트합니다.
오버플로를 방지하려면 '*' 연산자를 호출하기 전에 더 광범위한 형식에 값을 캐스트합니다(io.2).
대체 이게 왜 뜨는 건가요?
어떻게 해결할 수 있을까요?
scanf_s가 아니라 scanf 아닌가요? 그리고 연산자 우선 법칙에 따라 그냥 sqrt(xDiff*xDiff+yDiff*yDiff) 라고 입력해도 문제없습니다.
5:15
struct 인데 자꾸 struck 으로 적어서 에러났네 ㅡ,.ㅡ;;
#include
#include
#include
struct student{
int number;
char name[10];
double grade;
};
int main (void)
{
struct student s;
printf("학번을 입력하세요 : ");
scanf("%d", &s.number);
printf("이름을 입력하세요 : ");
scanf("%s", s.name);
printf("학점을 입력하세요 : ");
scanf("%lf", &s.grade);
printf("학번 : %d
",s.number);
printf("이름 : %s
",s.name);
printf("학점 : %.1f
",s.grade);
return 0;
}
이렇게 짰는데...
실행시키면
이전에 작업된 홍길동이 자꾸 나옵니다..
어디서 홍길동을 자꾸 불러오는걸까요? ㅜㅜ
이전에 작업된게 나오는 경우에는 구글에서 if 0 endif에 대해 검색해보시면 나올거에요!
실행기가 겹치는 것 갗은데요
//학생 정보 구조체 활용
#include
#include
struct student {
int number;
char name[10];
double grade;
};
int main(void)
{
struct student s;
printf("학번을 입력하세요:");
scanf("%d", &s.number);
printf("이름을 입력하세요:");
scanf("%s", &s.name);
printf("학점을 입력하세요:");
scanf("%1f", &s.grade);
printf("학번 : %d
", s.number);
printf("이름 : %s
", s.name);
printf("학점 : %.1f
", s.grade);
return 0;
}
이렇게 했는데 입력을 다 하고 나면 결과창에 오직 학점만 0.0 값이 출력이 되네요
s.grade 변수를 만들었고 그곳으로 scanf로 데이터를 보냈고 s.grade값을 출력하라고 명령했는 과정에
전혀 문제가 없는데 도대체 왜 이런 오류가 발생하는 걸까요?
학점을 입력받는 부분에서 grade변수가 double형이므로 f앞에 l을 붙여주셔야 합니다
배열 자체에 주소의 뜻이 있습니다
&s.name에서 &를 빼세용
여긴................어딘가? X ____________________X ;;;;
쉽게 생각해요!
ㅋㅋㅋ 20강까지 그냥 후욱 훑었네요.
다시 1강부터 돌려보는 중입니다. ^^*
원래 프로그래밍은 그렇게 공부하는 겁니다. 잘 하고 계시네요. :)
응원 감사합니다. ^^*
PHP SQL JS JQUERY 등 강의도 기대합니다. ^^
SQL, jQuery는 생각하고 있습니다. :) 기대해주세요.
카페같은거 안만드세요?^^;;;
#include
#include
struct student {
int number;
char name[10];
double grade;
};
int main(void) {
struct student s;
s.number = 20150001;
strcpy(s.name, "홍길동"); 여기서 strcpy가 선언되지 않았다는 문구가 자꾸 뜨멘서 에러가 나네욤.
s.grade = 4.5;
printf("학번: %d
", s.number);
printf("이름: %s
", s.name);
printf("학점: %.1f
", s.grade);
return 0;
}
#include
#include
#include
struct student
{
int number;
char name[20]; // 배열은 자체적으로 주소의 의미를 가짐.
double grade;
};
int main(void)
{
// 구조체란 ? 객체 지향 프로그래밍에서 말하는 class의 모체가 되는 것으로 여러 개의 자료형을 묶어서
// 새로운 자료형을 만들 수 있는 방법입니다.
struct student s; // 구조체 student 를 s라는 변수로 만들어줌.
printf("학번을 입력하세요 : ");
scanf_s("%d", &s.number);
printf("이름을 입력하세요 : ");
scanf_s("%s", s.name); // 배열은 그 자체로 포인터의 의미를 가지고 있으므로 이미 주소의 의미를 가짐.
printf("학점을 입력하세요 : ");
scanf_s("%lf", &s.grade);
printf("학번 : %d
", s.number);
printf("이름 : %s
", s.name);
printf("학점 : %.1lf
", s.grade);
return 0;
}
여기서 scanf_s('%s", s.name);에서 이름을 입력하면 갑자기 프로그램이 조금 렉걸리다가
종료가 되어버립니다. 이유가 무엇일까요 ??