2017-08-11 114 views
0

我的打印功能使用va_arg函数打印随机字符。我无法弄清楚为什么它不起作用。提前谢谢你的帮助!va_arg打印随机字符

#include <stdio.h> 
#include <stdarg.h> 
#include <string.h> 

int myprint(const char *str, ...) { 
    va_list args; 
    int counter = 0; 
    va_start (args, str); 
    while (*str) { 
    if (*str == '&') { 
     fputc(va_arg(args, int), stdout); 
     counter++; 
    } else { 
     fputc(*str, stdout); 
    } 
    str++; 
    } 
    va_end(args); 
    fputc('\0', stdout); 
    return counter; 
} 

int main(void) 
{ 
    myprint("Hello!\n"); 
    myprint("Number: &\n", 5); 
    myprint("Number one: &, number two: &\n", 120, 1345); 
    int ret = myprint("Three numbers: & & &\n", 12, 444, 5555); 
    myprint("I just printed & integers\n", ret); 

    return 0; 
} 
+1

你为什么认为'fputc'会打印整数? –

+0

那么如何将整数转换为文本? – Coldcode

+1

您需要使用'fprintf(stdout,“%d”,va_arg(args,int));' –

回答

0

fputc采用int,而是输出字符其中int参数值是ASCII代码。简单地将int铸造成char

因此,使用fputc打印int的无法正常工作,你可以写

fputc(va_arg(args, int) + '0', stdout); 

但它更容易简单地使用相关功能,为printf(),所以每个人都可以轻松地阅读它

printf("%d", va_arg(args, int)); 

希望你现在了解这个问题。