char name[5][7] = { "홍길동", "마동석", "장하늘", "김태형", "김정국" };
int score[5][3] = { {78, 82, 92}, {85, 76, 81}, {80, 94, 65}, {93, 87, 78}, {79, 89, 90} };
char scname[7];
printf("이름을 입력하세요. ");
scanf_s("%s", &scname, 7);
while ((strcmp(name[0], scname) != 0) && (strcmp(name[1], scname) != 0) && (strcmp(name[2], scname) != 0) && (strcmp(name[3], scname) != 0) && (strcmp(name[4], scname) != 0))
{
printf("이름을 다시 입력해주세요. ");
scanf_s("%s", &scname, 7);
}
배열로 이름이랑 성적을 넣었고요
보면 아시겠지만 이름을 입력해서 name배열에 없는 이름일 경우 다시 입력하는 while문을 짰어요
정상적으로 name배열의 이름을 넣을 경우 while문이 작동하는데요
근데 이상한 점을 발견했는데요
이름을 입력할 때 scname[7]배열의 크기를 넘어가는 ex)마동석마동석
이렇게 입력할 경우 while문이 printf를 한번 뿌리고 scanf_s를 그냥 스킵하고 다시 printf뿌리고 scanf_s로 들어가서
이름을 다시 입력해주세요. 이름을 다시 입력해주세요.
가 되더라고요
왜 이러는 걸까요?
2줄요약
scname[7] 문자열 사이즈 넘는 문자열을 넣으면
printf 한번 찍고 scanf 스킵하고 printf 한번 찍고 scanf받음
그리고 추가적인 질문인데
배열을 이차원 배열로 나타냈을 때, 출력을 행 단위로는 할 수 없나요?
printf("%d", score[0]); 을 하면 78 82 92가 찍히는 요행을 바라봤는데 역시 안되더라고요