int age[100][100] = { 0, };
char name[100][100] = { 0, };
char strname[100][100] = { 0, };
int a, b, c, d, e;
int choice, choice1;
int choice2, choice3;
char selectname[100];
int selectage;
int select, select1;
int select2, select3;
int count = 0;
char name1;
int age1;
int menu;
int swapname;
int swapage;
int strinput[100];
// 행, 열의 개수를 선택 행 = choice2 , 열 = choice3;
printf("몇 층 입니까 : ");
scanf("%d", &choice2);
printf("몇 명 입니까 : ");
scanf("%d", &choice3);
printf("입주민의 정보를 입력하세요\n");
for (int q = 0; q <= choice2 - 1; q++)
{
printf("이름 입력 : ");
scanf("%s", &name[q]);
}
for (int q = 0; q <= choice2 - 1; q++)
{
printf("이름 : %s\n", name[q]);
}
for (int i = 0; i <= choice2 - 1; i++)
{
for (int j = 0; j <= choice3 - 1; j++)
{
printf("10%d동 10%d호\n", i + 1, j + 1);
printf("나이 입력 : ");
scanf("%d", &age1);
age[i][j] = age1;
}
printf("\n");
}
while (1)
{
for (int i = 0; i <= choice2 - 1; i++)
{
printf("-----------------------------------------------------------------------------------------------\n");
for (int j = 0, q = 0; j <= choice3 - 1; j++, q++)
{
printf("ㅣ이름 : %s 나이 : %d", name[q], age[i][j]);
}
printf("\n");
}
printf("-----------------------------------------------------------------------------------------------\n");
printf("1. 이사, 2. 입주\n");
scanf("%d", &choice);
if (choice == 1)
{
printf("이사 할 입주민의 정보를 입력하세요\n\n");
printf("이름 : ");
//getchar();
scanf("%s", &selectname);
printf("나이 : ");
scanf("%d", &selectage);
printf("\n\n1. 왼쪽으로 밀기, 2. 오른쪽으로 밀기, 3. 한명만 이사가기, 4. 이사 간 뒤 앞으로 입주하기\n");
scanf("%d", &menu);
for (int i = 0; i <= choice2 - 1; i++)
{
for (int j = 0; j <= choice3 - 1; j++)
{
if (name[i][j] == selectname && age[i][j] == selectage)
{
select = i;
select1 = j;
break;
}
}
}
//index 범위 벗어나지 않게 주의하기
if (menu == 1)
{
//왼쪽으로 밀기
swapname = name[select][select1];
swapage = age[select][select1];
for (int j = select1; j <= choice3 - 1; j++)
{
name[select][j] = name[select][j + 1];
age[select][j] = age[select][j + 1];
if (name[select][j] <= choice3 - 1 && age[select][j] <= choice3 - 1)
{
break;
}
}
name[select][choice3 - 1] = swapname;
age[select][choice3 - 1] = swapage;
}
if (menu == 2)
{
//오른쪽으로 밀기
// 끝에 있는 값
swapname = name[select][choice3 - 1];
swapage = age[select][choice3 - 1];
for (int j = choice3 - 1; j >= 0; j--)
{
name[select][j] = name[select][j - 1];
age[select][j] = age[select][j - 1];
if (name[select][j] <= choice3 - 1 && age[select][j] <= choice3 - 1)
{
break;
}
}
//첫번째 값에 끝에 있는 값 넣기
name[select][0] = swapname;
age[select][0] = swapage;
}
if (menu == 3)
{
//한명만 이사
for (int j = select1; j <= choice3 - 2; j++)
{
name[select][j] = 0;
age[select][j] = 0;
if (name[select][j] <= choice3 - 1 && age[select][j] <= choice3 - 1)
{
break;
}
}
}
if (menu == 4)
{
//이사간 후 앞으로 땡기기
for (int j = select1; j <= choice3 - 2; j++)
{
name[select][j] = name[select][j + 1];
age[select][j] = age[select][j + 1];
name[select][j + 1] = 0;
age[select][j + 1] = 0;
if (name[select][j] <= choice3 - 1 && age[select][j] <= choice3 - 1)
{
break;
}
}
}
}
}
문자열 이제 첨 배워서 감이 잘 안오네 아오
근데 암튼 아까 댓글중에 답이있음 문자열은 문자의 배열 즉 char[]형태이고 배열이름은 배열 시작주소 가리키는 포인터로 decay되기에 &필요없음
흠 문자형은 굳이 입력 받을때 &가 필요없다는건 알겠는데 2차원 배열에서 사용 하려니깐 반복 지점을 정하기도 어렵고 너무 어렵네 ... 1차원 배열로 하면 개쉬운데 왜 2차원배열로 하려니깐 이해가 안되는거지 암튼... 알려줘서 고맙다..