none
printf에서 "%d"를 썻고 인수가 안들어갔는데 실행되는 원리가 궁금합니다.(최소값, 최대값 부분) RRS feed

  • 질문

  • #include <stdio.h>

    void min(int *a, int *b, int *c, int *min_val);
    void max(int *a, int *b, int *c, int *max_val);

    int main() {

    int a, b, c, min_val, max_val;  

    printf("세 정수 a, b, c를 입력: "); 
    scanf("%d %d %d", &a, &b, &c);

    min(&a, &b, &c, &min_val);
    printf("최소값은 %d입니다. \n");

    max(&a, &b, &c, &max_val);
    printf("최대값은 %d입니다. ");

    return 0;
    }

    void min(int *a, int *b, int *c, int *min_val) {
    if(*a > *b) {                                
    if(*b > *c) {                             
    *min_val = *c;  
    }

    else {                                   
    *min_val = *b;   
    }
    }

    else {                                       
    if(*a > *c) {                             
    *min_val = *c;  
    }

    else {
    *min_val = *a;     
    }
    }
    }

    void max(int *a, int *b, int *c, int *max_val) {
    if(*a > *b) {
    if(*a > *c) {
    *max_val = *a;      
    }

    else {
    *max_val = *c;          
    }
    }

    else {
    if(*b > *c) {
    *max_val = *b;        
    }

    else {
    *max_val = *c;          
    }
    }
    }

    밑에 두 부분입니다.

    printf("최소값은 %d입니다. \n");

    printf("최대값은 %d입니다. ");

    • 편집됨 suter12 2019년 10월 23일 수요일 오전 4:42
    2019년 10월 23일 수요일 오전 4:40

모든 응답

  • 프로젝트를 빌드하면 C4473 경고가 표시됩니다.



    컴파일러가 형식 문자열에서 플레이스홀더를 만족시키는데 필요한 인수 수와 제공된 인수 수 사이의 불일치를 발견했습니다. 불일치는 일반적으로 코드에 문제가 있는것을 의미합니다.

    프로그램을 디버깅하면 콘솔 창에 숫자 문자열이 표시되고 매번 표시되는 숫자가 다릅니다. C++ 표준에서 이것은 정의되지 않은 행위 (UB)입니다.





    UB는 플랫폼, 컴파일러 및 런타임 컨텍스트에 따라 결과가 다를 수 있습니다. 결과에 다른 결과가 표시 될뿐만 아니라 크래쉬 또는 기타 행위일 수도 있습니다.

    printf를 정확하게 사용하는것을 제안합니다.

             min(&a, &b, &c, &min_val);
             printf("The minimum value is %d. \n", min_val);
    
             max(&a, &b, &c, &max_val);
             printf("The maximum value is %d. ", max_val);


    디테일에 관련해서는 아래 문서를 참조하실수 있습니다.
    https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/printf-printf-l-wprintf-wprintf-l?view=vs-2019 
    https://docs.microsoft.com/en-us/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions?view=vs-2019 

    MSDN Community Support Ricky

    다른 커뮤니티 멤버에게 도움이 될 수 있게 문제를 해결 한 답변을 '답변으로 표시'를 클릭하시고 그렇지 않은 경우 '답변으로 표시 취소'를 클릭하시기 바랍니다. MSDN 서포트에 대한 의견이나 불만이 있을 경우 MSDNFSF@microsoft.com 으로 연락하시기 바랍니다.


    2019년 10월 23일 수요일 오전 10:05
    중재자