형들 미안 아직 c언어 초보라 직접짠거여서 들여쓰기도 서투르고 오류가 많아 ㅠㅠ
#include<stdio.h>
#include<string.h>
typedef struct str {
int num;
int level;
char chname[30];
}PLUS;
void plus(PLUS *a[]) {
int i;
int n;
scanf_s("%d",&n);
for(i=0;i<n;i++) {
scanf_s("%d %d %s",(*a)[i]->num,(*a)[i]->level,(*a)[i]->chname);
}
}
int main() {
PLUS a[10];
plus(&a);
}
이렇게 했는데 scanf_s에서 오류가 떠요 ㅠㅠ알려주세요 프갤님드라
참고로 이건 캐릭터 번호 레벨 닉넴 받아서 구조체배열에 저장하는 코드에요
scanf_s("%d %d %s",(*a)[i]->num,(*a)[i]->level,(*a)[i]->chname,30);
그건이중포인터아니에요?? 그건아직안배웠어욤
이중포인터 배우고 구조체 배우지않냐?
scanf는 주소를 줘야지
&대신 -> 도 되는걸로 알고있었는데 아닌가염
병장말 무시해라.... 배열의 이름은 주소라서 상관없다
포인터를 넘겨주는 경우는 보통 값의 복사가 아니라 주소를넘겨줌으로써 그 안의 값의 수정이 호출부에도 동일하게 적용되기 위함은데
인티져는 어쩔건데
저기서 도대체왜 포인터로 넘겨주는거냐
scanf_s("%d %d %s", &(*a)[i]->num, &(*a)[i]->level, (*a)[i]->chname);
너는 포인터의 개념이 없나본데 scanf_s도 api함수로 너가 int n을 선언한다음 scanf_s에 넣어줘도 너가넘겨준 n의 값을 변경해도 실제 호출부에서는 바뀌지 않아... 주소로 넘겨줘야지 값을 변경해도 호출부에서도 적용되는거지
그래서 보통 scnaf("%d" &n);으로 해서 n의 주소를 넘겨서 scanf함수 내부에서 포인터접근을해서 n의 값을 변경하면 scanf함수 호출부의 n의 값도 수정되는거지
제가이쪽에발들인지얼마안되서요 죄송해요 ㅠㅠ
너가 (*a)[i]->num 값을 넘겨줫는데 위에 n처럼 일반 변수값을 넘기면 내부에서는 복사가 일어나지 함수내부에서 수정된 정보가 호출부에 피드백되지 않아.... 주소를 넘겨줘야지
주소주는거 맞는데 왠 배열 헛소리 지껄이노
그리고 ->는 &가 아니라 *임
그리고 내가 잘못 알려줬네 지워야겠다
개체포인터 형식이 있어야한다그러면서 오류나는데 다른문젠가여
scanf_s("%d %d %s",&((*a)[i]->num),&((*a)[i]->level),(*a)[i]->chname,30); 해봐라
똑같아욤
scanf_s("%d",&((*a)[i]->num); scanf_s("%d",&((*a)[i]->level)); scanf_s("%s",(*a)[i]->chname,30); 안되면 접어요
후,,안되네요 ㅋㅋ 2013버전이라그런가
void plus(PLUS a[]) {int i; int n; scanf_s("%d",&n); for(i=0;i<n;i++) { scanf_s("%d %d %s",a[i]->num,a[i]->level,a[i]->chname,30); } }
걍접을개요 ㅋㅋ
거의 해결 했는데 배열에서 막히네