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가 찍히는 요행을 바라봤는데 역시 안되더라고요