c ++ cout打印错误的值

时间:2016-11-20 15:41:53

标签: c++ printf cout

我试图在printf中构建C++函数;它有效,但是当我打印intfloat时,我输入的任何值都会得到0

#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 个答案:

答案 0 :(得分:7)

传递给C风格的可变参数函数的参数在传递时首先被提升。 charshort被提升为intfloat被提升为double等。

因此,您的va_arg收到double参数,而不是float

您需要更改

cout << va_arg(Paramters, float);

cout << va_arg(Paramters, double);

它应该可以正常工作。

有关此主题的更详细说明,请参阅此问题:

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