인프런 커뮤니티 질문&답변

밑바닥개발자님의 프로필 이미지
밑바닥개발자

작성한 질문수

독하게 시작하는 C 프로그래밍

조건 (3항) 연산자

조건 (3항) 연산자 질문과 필수 연습문제(1)

해결된 질문

작성

·

91

1

안녕하세요~ 질 좋은 강의에 감사인사 부터 드립니다! (__)

조건 (3항) 연산자 강의에서 아래의 소스코드로 설명해주셨는데요!

int main(void)
{
    int nInput = 0, nSelect = 0;
    scanf_s("%d", &nInput);
    nSelect = nInput <= 10 ? 10 : 20;
    printf("%d\n", nSelect);
    return 0;
}

보면 nSelect 변수에다가 조건 연산자를 넣어서 특정 변수가 할당되도록 하셨는데요!

합격/불합격 문자열을 출력하는 필수 연습문제(1)에서 문자열을 출력할 때도 저 소스코드 처럼 활용해보려고 문자열 배열 변수를 초기화해놓고 출력해보려 아래 처럼 시도를 해보았는데, 에러가 발생하더라구요

int main(void)
{
    unsigned int score = 0;
    char result[32] = { 0 };
    scanf_s("%d"m &score);
    result = (score >= 80) ? ("합격") : ("불합격");
    printf("결과: %s\n", result);
    return 0;
}

그래서 강의에서 알려주신 것처럼 printf 함수에 저 조건 연산자 식을 넣어서 맞추긴 했는데.. 위 코드는 왜 안되는건지 궁금합니다!

답변 2

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

질문답변 목록 삭제용으로 댓글남깁니다. 😄

1

안녕하세요, 인프런 AI 인턴입니다.

밑바닥개발자님께서 C 프로그래밍 과정에서 조건 (3항) 연산자 사용에 관한 질문을 주셨군요. C언어에서 “합격/불합격 문자열”을 출력하는 과정에서 문자열 배열 변수를 조건부로 할당하려고 시도하셨으나 에러가 발생한 부분에 대한 답변입니다.

에러의 주된 이유는 C언어에서 문자열(array of characters)은 다른 배열처럼 직접 변수에 할당할 수 없는 특성 때문입니다. 다시 말해, C에서는 한 배열을 다른 배열에 직접 할당하는 작업이 허용되지 않습니다. 특히 문자열을 다룰 때, 문자열은 배열의 형태로 메모리상에 저장되며 배열 이름은 그 배열의 첫 번째 원소를 가리키는 포인터로 사용됩니다. 여러분이 이메일 본문에서 시도하신 result 변수에 직접적으로 문자열 리터럴("합격", "불합격")을 할당하려고 한 것은 이러한 배열의 성격과 C언어의 할당 규칙에 어긋나므로 컴파일 에러를 일으키게 됩니다.

문제의 해결 방법은 두 가지 주요 접근 방식이 있습니다:

  1. printf 함수 내에서 조건 연산자 사용하기: 이미 해본 것처럼, 직접 printf 함수 안에서 조건 연산자를 사용하여 조건에 따라 다른 문자열을 선택하는 것입니다.

    printf("결과: %s\n", (score >= 80) ? "합격" : "불합격");
    

    이 방식은 가장 단순하면서도 효율적인 방법입니다.

  2. 문자열 복사 함수 사용하기: strcpy 함수(예: strcpy(result, "문자열"))를 사용하여 조건에 따라 선택된 문자열을 result 배열에 복사하는 것입니다. 하지만 이 경우에는 조건부 로직을 별도로 구현해야 하며, strcpy 대신 더 안전한 strcpy_s를 사용하는 것이 좋을 수도 있습니다.

보다 상세한 질문에 대한 답변과 유사한 문제를 다룬 예제는 다음 링크를 참고하시면 도움이 될 것입니다:

  • [섹션10 연산자] 필수 실습 문제 합격, 불합격 판단하기](https://www.inflearn.com/questions/1194432)에서 유사한 상황과 비교하여 printf 내에서의 조건 연산자 사용법과 관련된 논의가 이루어졌습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

인턴 답변으로 해결이 되었씁니다!

밑바닥개발자님의 프로필 이미지
밑바닥개발자

작성한 질문수

질문하기