2016-11-20 9 views
-3

printf 함수를 C++에 빌드하려고했습니다. 그것은 효과가 있었지만, intfloat을 인쇄 할 때 나는 입력 한 값에 0을 얻는다.C++ cout이 잘못된 값을 인쇄 중입니다.

#include <iostream> 
#include <stdarg.h> 

using namespace std; 

void printf1(const char* varlist, ...) 
{ 
int i = 0; 
va_list Paramters; 
va_start(Paramters, varlist); 
while (varlist[i] != '\0') 
{ 
    if (varlist[i] == '%') 
    { 
     switch (varlist[i + 1]) 
     { 
     case 's': 
      cout << va_arg(Paramters, const char*); 
      cout << ' '; 
      break; 
     case 'i': 
      cout << va_arg(Paramters, int); 
      cout << ' '; 
      break; 
     case 'f': 
      cout << va_arg(Paramters, float); 
      cout << ' '; 
      break; 
     } 
    } 
    ++i; 
} 
va_end(Paramters); 
cout << endl; 
} 

int main() 
{ 
float f = 3.5; 
printf1("%f", f); 
int num = 2; 
printf1("%i", num); 
return 0; 
} 
//0 
//0 
//Press any key to continue . . . 

불량 띄우기는 유감이지만 여기에 복사하여 붙여 넣는 것은 이상합니다.

+1

_printf 기능을 ++ _ 이유는 무엇입니까? 왜 –

+1

std :: cout ...을 사용하는 printf 함수입니다. 원래 – Treycos

+0

그것은 할당되었습니다. 잘 나는 당신이 printf에 화를 내기 때문에 싫어하는 것을 두는 것을 알지 못했다. – Rokni

답변

7

C 스타일 가변 함수에 전달 된 매개 변수는 전달 될 때 먼저 승격됩니다. charshortint에 승진, float이 결과, double에 등

을 촉진, 당신의 va_argdouble 매개 변수가 아닌 float를받습니다.

당신은

cout << va_arg(Paramters, double); 

cout << va_arg(Paramters, float); 

을 변경해야하고 그것은 잘 작동합니다.

이 주제에 대한 자세한 설명은

,이 질문을 참조하십시오 C에서

Variadic function (va_arg) doesn't work with float?

+0

기술적으로,'char'와'short' 같은 정수형은 전달 될 때 variadic 함수에 전달되었는지 여부에 관계없이 항상 승격됩니다. 그리고 ** 다른 사람의 답변을 표절하지 마시기 바랍니다 **. 질문을 복제본으로 표시하지 않고 다른 사람의 대답을 자신의 것으로 복사/붙여 넣었습니다. –