이름입력은 6 char 입니다. string이기 때문에 널문자가 필요합니다. 그래서 입력가능한 글자는 5 char입니다.
한글은 2 char씩 들어가는 것 아시죠?
한글 이름 입력시 한글 3자씩 입력했습니다. 그럼 이를 저장하는데는 7 char이 필요하겠지요?
그런데 저장공간은 5 char 입니다. 부족하겠지요..
이상 현상이 일어날 것입니다. 이 경우 입력된 이름이 포개?지던지 연속적으로 나오던지.. 그러겠지요..
해결방안은 한글명 2자씩 넣던지.. 이름저장 공간을 늘이는 것입니다.
name[50][6] -> 충분히 늘이십시오.. name[50][128] 이정도.. ^^
ANSI C 왕초보 님이 쓰신 글 :
: #include <stdio.h>
:
: float ave(int a, int b, int c);
:
: void main()
: {
: int i, k;
: for(;;)
: {
: printf("\n몇명의 학생의 성적을 입력하실 것입니까?(단 50명까지) : ");
: scanf("%d",&i);
: if (i>0) break; /* 입력값이 0이하면 재입력 하는 구문 */
: else
: ;
: }
:
: char name[50][6];
: int kuk[50], eng[50], su[50]; /* 1차원 배열 49번 번지까지 50개 */
: float av;
: for (k=0; k<=i-1; k++) /* 위에서 입력받은 i를 통해 i번 반복하는 구문 */
: {
: printf("\n %d번째 학생의 이름 및 성적을 입력하세요!(100점 만점기준) \n",k+1);
: printf("[이름] : "); scanf("%s",name[k]);
: printf("[국어성적] : "); scanf("%d",&kuk[k]);
: printf("[영어성적] : "); scanf("%d",&eng[k]);
: printf("[수학성적] : "); scanf("%d",&su[k]);
: }
:
: printf("\n 이름 국어 영어 수학 평균 \n");
:
: for (k=0; k<=i-1; k++)
: {
: av=ave(kuk[k], eng[k],su[k]); /* 평균구하는 함수를 리턴 받아 av에 저장 */
: printf(" %s %d %d %d %.1f\n", name[k],kuk[k],eng[k],su[k],av);
: }
:
: }
:
: float ave(int a, int b, int c)
: {
: float ddd;
: ddd=(a+b+c)/3;
: return ddd;
: }
:
:
: 일단 소스는 저렇고요~ 실행하면 첨부 스샷처럼 이름이 이상하게 나오네요..ㅠ.ㅜ
: 왜그런지 아시는분~ 고쳐주실분 ..ㅠ.ㅜ
: 영어로 이름을 쓰면 잘 나오는데 한글로만 쓰면 첫번째 스샷처럼 나오네요..ㅠ.ㅜ
: 맨땅에 박치기하면서 몇시간 만에 짰는데..ㅠ.ㅜ 아아;;; 왜 그런지 아시는분 설명좀..ㅠ.ㅜ
|