2017-08-11 115 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)); 

希望你現在瞭解這個問題。