2016-11-20 19 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スタイルの可変関数に渡されるパラメータは、渡されるときに最初に昇格されます。 charshortなど、intに昇格さfloatdoubleに昇格さ

その結果、あなたの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'のような整数型は、渡されるときにバリデーション関数に渡されるかどうかにかかわらず常に昇格されます。そして、**他人の答えを盗んではいけません**。質問を重複としてマークするのではなく、他の人の回答を自分のものとしてコピー/貼り付けます。 –

関連する問題