我试图建立一个printf功能C++; 它的工作,但是当我打印int和float,我得到一个0任意值I输入.
#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 . . .
Run Code Online (Sandbox Code Playgroud)
抱歉间距不好,但复制贴在这里很奇怪.
传递给C风格的可变参数函数的参数在传递时首先被提升.char而short被晋升为int,float被晋升为double等
因此,您va_arg收到的double参数不是a float.
你需要改变
cout << va_arg(Paramters, float);
Run Code Online (Sandbox Code Playgroud)
至
cout << va_arg(Paramters, double);
Run Code Online (Sandbox Code Playgroud)
它应该工作得很好.
有关此主题的更详细说明,请参阅此问题:
| 归档时间: |
|
| 查看次数: |
607 次 |
| 最近记录: |