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