2017-08-11 8 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コードで文字を印刷します。 intcharにキャストするだけです。

だから、あなたが

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

を書くことができますが、誰もが簡単に読むことができるので、それは、単にprintf()として、関連する機能を使用する方が簡単ですintの文句を言わない仕事を印刷するためのfputcを使用して、それ

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

あなたは今問題を理解することを願っています。

関連する問題