자꾸 질문드려 죄송한데;; 학성처리 질문입니다.
봄바람
질문제목 : 학생 문자가 출력이 안됩니다.
이름을 입력하고 숫자들은 해결했으나 이름이 영문으로만 출력이 됩니다.
제가 원하는건 한글이든 영어든 둘다 써도 출력되게 해보고 싶거든요.
질문 내용 : 여기서 어떻게 수정해야 할지 모르겠습니다.. 계속 질문드려 죄송해요 ㅜ 여기서 막히네요
name=(char*)malloc(4096); 이거 4바이트 의미하는거 아닌가요?..ㅜ 왜 안되는거지.
#includestdio.h
#includemalloc.h
#includestring.h
int main(void)
{
int students, s, engsum=0, korsum=0, mathsum=0;
double max=0, min=0;
int *engscore=null;
int *korscore=null;
int *mathscore=null;
char *name=null;
printf(성적을 처리할 학생 수를 입력하세요:);
scanf(%d,&students);
fflush(stdin);
engscore=(int*)malloc(sizeof(int)*students);
korscore=(int*)malloc(sizeof(int)*students);
mathscore=(int*)malloc(sizeof(int)*students);
name=(char*)malloc(4096);
printf(학생의 이름과 성적을 입력하세요\n);
for(s=0 ; sstudents ; s++)
{
printf(%d번 이름: (영어 국어 수학):,s+1);
scanf(%s %d %d %d,&name[s],&engscore[s],&korscore[s],&mathscore[s]);
fflush(stdin);
}
printf(-----------------------\n);
for(s=0 ; sstudents ; s++)
{
engsum += engscore[s];
korsum += korscore[s];
mathsum += mathscore[s];
printf(%d번 이름:%c 영어:%d 국어:%d 수학:%d\n,s+1,name[s],engscore[s],korscore[s],mathscore[s]);
}
max=engscore[0]+korscore[0]+mathscore[0];
min=engscore[0]+korscore[0]+mathscore[0];
for(s=0 ; sstudents ; s++)
{
if(max ( engscore[s]+korscore[s]+mathscore[s]))
max=engscore[s]+korscore[s]+mathscore[s];
if(min ( engscore[s]+korscore[s]+mathscore[s]))
min=engscore[s]+korscore[s]+mathscore[s];
}
printf(최고점학생은 %c 총점은 %3f 평균은 %3.2f\n,name[s],max,max/students);
printf(최저점학생은 %c 총점은 %3f 평균은 %3.2f\n,name[s],min,min/students);
printf(-----------------------\n);
printf(영어총점:%3d점\n,engsum);
printf(영어평균:%3.2f점\n,(double)engsum/students);
printf(국어총점:%3d점\n,korsum);
printf(국어평균:%3.2f점\n,(double)korsum/students);
printf(수학총점:%3d점\n,mathsum);
printf(수학평균:%3.2f점\n,(double)mathsum/students);
free(engscore);
free(korscore);
free(mathscore);
free(name);
return 0;
}
한글로 쓰면 ? 표시 영어로 쓰면 한글자만 나옵니다.. 이 문자열 나오게 할려면 name=(char*)malloc(4096); 공간을 어떻게 늘려야 하나요? 질문 계속해서 죄송합니다 ㅜ
-
큰뫼
지금 소닉님이 할당받은 배열은 4096바이트이죠. 즉 4096문자의 문자열 하나만 저장할 수 있습니다. 왜냐하면 문자열을 뒤에 널문자로 구분하는데 배열 하나당 널문자는 하나만 존재할 수 있죠. 그니까 저렇게 할당받으시면 인덱스 0부분만 계속 쓰이게 되는거죠 첫번째부분이요.
즉 문자열 하나를 저장하려면 하나의 배열이 필요하죠? 학생수만큼 배열을 할당받아야죠 그러면 2차원 배열을 동적할당 받으면 되겠죠? 그러려면 더블포인터가 필요하죠 그 후에 %s 로 인 -
텃골
흠..저도 구조체로 표현을 할려고했는데요 교수가 배우는대까지 하라고해서 구조체를 쓰지 못하고 있어요.. 제가 아직 c언어를 잘 못해서 그러는데.. 표현방법이 어떻게하면 되는지만 예라도 알려주시면 안될까요? ㅠ
-
이뻐
문자열은 char형 배열로 저장하는 거잖아요? 님이 이름을 저장하려고 받은 건 4096바이트크기의 배열을 할당받으신거예요. 그래서 이름 받을때마다 계속 할당받아야 합니다. 이건 따로 따로 할당을 받으실게 아니라 구조체 하셔서 묶음으로 구조체채로 동적할당 받는게 더 쉽습니다.
-
파라미
그게.. %s로 고쳤더니 에러걸리면서 도중에 멈춤니다.ㅠ
-
그대와나
출력하는 반복문에서 %c 로 하시니까 한글자만 나오죠.. %s 로 하셔야 문자열로 출력됩니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692451 | 이 문제좀 풀어주세요 ^^ | 게자리 | 2025-04-23 |
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |