해결된 질문
작성
·
41
·
수정됨
0
#include <stdio.h>
int main(void)
{
int nInput = 0;
int answer = 0;
scanf_s("%d", &nInput);
answer = (nInput >= 80) ? printf("pass") : printf("fail");
printf("%c\n", answer);
return 0;
}
이 코드가 왜 실행되는지 모르겠어요 문자열
%s가 아니라 왜 %c로 했는데 되는지 궁금해요
%s로 해도 실행은 되는데
이렇게 초록색 줄로 그이고 실행 했을 때 처리 속도도 느린데 왜 그런건가요?
answer에 printf 함수가 들어가면 어떻게 되는 건가요? 나중에 이런것도 설명 해주시나요?
답변 2
0
기본적인 내용은 인프런 AI 답변을 참고하시면 됩니다. 부족한 부분에 대해서만 설명을 드립니다.
char, short, int형은 모두 정수형입니다. C언어에서 %c 형식문자는 정수형 자료를 ASCII 코드로 변환해 출력합니다. answer는 int형 변수이므로 저장된 값을 ASCII 코드로 변환해 출력할 것입니다.
그런데 이 형식문자를 %s로 변경할 경우 answer 변수에 저장된 값을 메모리 주소로 해석하고 접근하게 됩니다. 이 경우 접근 할 수 없는 영역을 참조하려 시도할 가능이 있습니다. 녹색 줄이 표시된 이유는 이 때문입니다. 그 문제를 경고하고 있는 것입니다. 그럼에도 빌드 후 실행하면 다음과 같이 오류가 발생합니다.
속도가 느리다고 느낀 이유는 디버그 모드가 아닌 일반모드 실행 시 비정상 종료과정이 길어졌기 때문입니다.
그리고 'answer에 printf 함수가 들어간다'라는 말의 의미를 명확히 알 수가 없습니다. printf라는 것이 함수의 이름이며 주소이므로 int형 변수에 저장이 불가능한 것은 아니지만 이는 32비트 환경에서 가능한 것이고 64비트로 빌드할 경우 잘림이 발생합니다. 이에 대해서는 나중에 함수 포인터를 배울 때 알 수 있습니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. 차희원님께서 질문하신 코드에 대한 설명을 드리겠습니다.
#include <stdio.h>
int main(void)
{
int nInput = 0;
int answer = 0;
scanf_s("%d", &nInput);
answer = (nInput >= 80) ? printf("pass") : printf("fail");
printf("%c\n", answer);
return 0;
}
Ternary Operator Usage:
(nInput >= 80) ? printf("pass") : printf("fail");
이 부분은 nInput
이 80 이상이면 "pass"
, 그렇지 않으면 "fail"
을 출력하는 역할을 합니다. printf
함수는 출력한 문자열의 길이를 반환하므로, answer
에 그 값을 저장합니다. 예를 들어, printf("pass")
를 호출하면 4
가 반환되고, printf("fail")
을 호출하면 4
가 반환됩니다.%c 사용:
printf("%c\n", answer);
에서 %c
는 문자 하나를 출력하는 형식 지정자입니다. 그런데 answer
에는 printf
함수의 반환값인 정수가 들어있어요. 단일 문자로 출력하려다 보니 엉뚱한 문자가 출력될 수 있습니다.answer
변수는 printf
의 반환값을 문자로 해석하려고 하다 보니 논리적으로 어울리지 않습니다. 따라서 다음과 같이 printf
문을 각각 사용하면 명료합니다:#include <stdio.h>
int main(void)
{
int nInput = 0;
scanf_s("%d", &nInput);
if (nInput >= 80)
printf("pass\n");
else
printf("fail\n");
return 0;
}
printf
의 반환값은 단순히 출력한 문자 수입니다. 이를 문자로 취급하려는 printf("%c\n", answer);
구문은 비논리적입니다.printf
의 반환값을 적절하게 활용하거나 필요하지 않다면 무시하는 것이 좋습니다.이와 관련된 유사한 질문과 답변은 여기에서 확인하실 수 있습니다: [섹션10 연산자] 필수 실습 문제 합격, 불합격 판단하기
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.