아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
단정한강아지120
단정한강아지12021.03.20

c언어 산술연산자에 대해 질문이있습니다.

c언어 산술연산자에 대해 질문이있습니다.

%연사자가 a와 b를 나누면 나머지 값을 반환하는데

int num1=9,num2=2;

printf("%d % %d=%d\n",num1,num2,num1%num2);

이렇게 코드를짜니

9 %d=2

이런 값이 출력이되네여

무엇이 문제인지 알수있을까요?

55글자 더 채워주세요.
답변의 개수
9개의 답변이 있어요!
  • printf의 포맷문자열의 기호인 '%'는 특정한 자료형의 표현하기 위해서 사용됩니다.

    에를들면

    int a=10;

    printf("%d\n", a); // 10이 출력

    그런데 님의 문장처럼 '%'를 문자 자체로 출력하려고 하면

    컴파일러는 '%' 는 포맷문자열을 나타내기 때문에 '%' 만 쓰게 되면 형식에 맞지 않게 됩니다.

    따라서 '%'문자 자체를 나타내고 싶으면 '%%' 를 써야 합니다.

    다음과 같이 하면 됩니다.

    printf("%d %% %d=%d\n",num1,num2,num1%num2);


  • "%d % %d=%d\n", 가 아니라 "%d %% %d=%d\n",로히면될것같네요. %하나만 쓰면 컴파일러가 해석하는데 문제의 여지가생겨서 그런것들에 추가로 더 붙여써야합니다

    printf구문의 첫번째 양식의 내용에 어떤것들이 사용이 가능하고 어떤경우에 어떤방법으로 대응할수있을지 공부해두면 좋을 것같네요


  • % 기호를 한 개를 출력하려면 %% 이렇게 문자열로 쓰시면 됩니다.

    printf 문자열 안에 % %d는 컴파일했을때 %%d로 인식해서 %d 이렇게 문자열로 출력한거 같네요.

    문자열을 "%d %% %d=%d%d\n",num1,num2,num1%num2

    이렇게 수정하시면 될겁니다.

    이상입니다!


  • 안녕하세요

    산술연산자에 대해서 질문 하셨네요. 해당 문제는 간단한 문제라서 답변도 간단하게 될 것 같습니다.

    일단 % 연산자에 대한 의미 자체는 정확히 알고 계시네요

    하지만 코드를 보시면 printf 함수에서 출력하는 출력서식에 '%' 문자는 특수한 의미를 가지기 때문에

    '%' 문자가 들어가게 되면 뒤에 오는 문자에 따라서 정수 형이든 실수 형이든 문자든 형에 맞게 출력을 하게 됩니다.

    그래서 '%' 문자 자체를 해당 출력에서 사용하시려면 '%%' 이렇게 두개를 연달아 입력을 하셔야 합니다.

    int num1=9,num2=2;printf("%d %% %d = %d\n",num1,num2,num1%num2);

    코드를 이렇게 변경하시면 정상적으로 출력이 되실꺼예요

    답변이 도움이 되었으면 하네요.


  • 위의 코드에서 컴파일한 출력값이 9 %d=2 으로 나오는 이유는

    printf 함수를 통해 출력을 할 때 소스 코드 중 "%d % %d" 이 부분에서 출력 관련하여 문제가 생기기 때문입니다. 중간에 %를 출력하기 위해서 %%로 치환하여 다시 소스 코드를 작성하여 컴파일 하신다면 제대로 출력될 것으로 보입니다.


  • 안녕하세요.

    모듈로 연산의 사용에 대한 질문을 주셨네요.

    printf 출력문에서 쉼표 전 서식문자(%d) 입력하신 부분을 보면

    중간에 모듈로 연산 기호(%)를 출력해주기 위해 한번 더 입력하신 부분이 있습니다.

    이 연산 기호는 특수 문자이므로, %를 두 번 입력해 주셔야 특수문자로 인식할 겁니다.

    수정된 코드를 정리하면,

    printf("%d %% %d = %d\n", num1, num2, num1%num2);

    이렇게 해 보시면 될 듯 합니다.

    코딩 시의 특수문자 출력 방법에 대해서는 구글에서 검색하시면 자세히 나올 것입니다.

    도움이 되셨기를 바랍니다.

    감사합니다.


  • 안녕하세요. 아하 프로그래밍 지식 답변자 입니다.

    해당 내용 Modular 연산자의 이스케이프 처리가 되어 있지 않아 발생하는 현상 입니다.

    Modular 연산자를 문자 그대로 출력(이스케이프)하기 위해선 %% 두 번 입력이 필요합니다.

    #include <stdio.h> int main() { int num1=9,num2=2; printf("%d %% %d=%d\n",num1,num2,num1%num2); return 0; }

    답변이 도움이 됐으면 좋겠습니다.

    좋은 하루 되세요!


  • %d % %d=%d\n

    사람이 보기에는 뒤에 있는 변수를 차례대로

    %d, %d, %d에 넣으라고 판단할 수 있지만 컴퓨터는 모릅니다.

    %이걸 붙이고 d를 넣으면 정수형 이라고 약속을 했는데 %뒤에 아무것도 없으니 말입니다.

    따라서 이런것을 방지하기 위해 보통 프로그램 상에서 특수문자나 서식문자는 구분할 수 있는 기호들을 붙입니다.

    %는 %% 로 표기 하면 String으로 %로 인식하여 출력할 수 있습니다.

    printf("%d %% %d=%d\n",num1,num2,num1%num2);

    구글에 c언어 서식문자라고 검색하시면 좀 더 다양한 답변을 들을 수 있을 것 같네요


  • 탈퇴한 사용자
    탈퇴한 사용자21.03.21

    C언어에서 %는 포맷 문자열에서 특수한 동작을 하는 문자입니다.

    뒤에 문자가 덧붙여서 타입을 나타내거나, 정밀도나 얼마나 출력할지 길이 등을 정할 수 있습니다.

    하지만 퍼센트라는 의미를 출력을 해야할 경우도 있기에 원 의미를 나타내기 위해 탈출(escape)하는 방법도 있습니다.

    바로 %% 처럼 두 퍼센트를 연달아 사용하면 이 문자는 퍼센트라고 출력을 할 수 있습니다.

    마치 C언어의 문자에서 역슬래시(\)가 줄바꿈문자(\n)나 탭문자(\t)등의 특수문자를 나타낼 수 있는데 역슬래시 자체를 출력하기 위해 두 개를 연달아 사용하는 것(\\)과 유사합니다.