char orig[20][50];
다음과 같이 선언된 2차원 배열을 이용해서
//한 행에 하나의 문자열을 저장
orig[0]="문자열 첫번째";
orig[1]="문자열 두번째 적는 중";
orig[2]="추가로 더 쓰기";
이런식으로 문자열을 받고 싶다면 다음과 같이 하면 된다.
몇 줄 받을 것인지 지정해주고 싶다면 아래와 같이 scanf로 숫자를 받는다.
int main(void)
{
char orig[20][50];
int num;
scanf("%d", &num); //몇 번 받을 것인지
getchar();
//문자열 받기// 한 행에 문자열 하나씩 받기
for (int i = 0; i < num; i++)
{
printf("문자열 입력 타임\n");
scanf("%[^\n]s", orig[i]);
getchar();
}
return 0;
}
scanf로 숫자를 받으면 버퍼가 차기 때문에 getchar();으로 버퍼를 지워준다.
scanf("%[^\n]s", orig[i]);로 이차원 배열에 문자열을 받을 때도 버퍼가 차기 때문에 scanf를 한 뒤에 getchar();으로 버퍼를 비워준다.
만약 버퍼를 안 비워주면 다음과 같이 쓰레기값이 차게 된다.
문자열 요소 하나하나에 접근하고 싶다면 다음과 같은 방법을 쓸 수 있다.
int change(char*str);
int main(void)
{
char orig[20][50];
int num;
scanf("%d", &num); //몇 번 받을 것인지
getchar();
//문자열 받기// 한 행에 문자열 하나씩 받기
for (int i = 0; i < num; i++)
{
printf("문자열 입력 타임\n");
scanf("%[^\n]s", orig[i]);
getchar();
}
for (int i = 0; i < num; i++)
{
printf("거꾸로 출력이 되면 %s", change(orig[i]));
}
return 0;
}
int change(char*str)
{
while(*str!='\0')
{
printf("한 글자씩 %c\n", *str);
str++;
}
return 0;
}
char*str에 orig[i]를 전달해줌으로써 str은 문자열 하나인 orig[i]를 가리키게 된다.
*str을 하면 문자열 요소 하나하나를 가리키게 된다. 또한 str++을 함으로써 주소값이 늘어나는데 문자열에서 다음 인덱스의 문자를 가리키게 한다.
C언어) 입력 버퍼 비울 때, getchar() 사용 시 유의사항 (0) | 2022.07.14 |
---|---|
특정 문자를 입력했을 때, 문자 하나 더 받기 (0) | 2022.07.03 |
c언어 mistake_출력형식 (0) | 2022.07.01 |
댓글 영역