使用printf(“%s”,& Buffer [i]);在C.

时间:2015-09-17 13:44:18

标签: c printf buffer

void Store(int temp){
    Buffer[i]=temp;
    i--;

}

int main(int argc, char *argv[]){
    Buffer[64]=00;

    int value = atoi(argv[1]);
    int base = atoi(argv[2]);

    char Table[16] = { '0', '1', '2', '3', '4', '5' , '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

    //Mathmatical algorithm 
    while(value !=0){   
        digit = value%base;
        value = value/base;
        Store(digit);
        printf("%s",&Buffer[i]);
    }

我开始自学C语言。我试图弄清楚如何使用这个char缓冲区[65]使用printf。基本上,我的算法会提取用户给出的值和基数,然后计算该数字在该基数中的数量。如果我改变我的printf打印输出数字,它打印“123”为57 base 4.所以,我把它以反向方式存储到Buffer数组中(将int i设置为63因为我将64设置为null)。

长话短说,当它存储到缓冲区中时,递增,然后返回到while循环,它不会打印任何文本。

编辑:当我环顾四周时,看起来printf只打印ascii字符。所以我需要将数字转换为表[16]中的一个字符?

1 个答案:

答案 0 :(得分:2)

这是一个有效的答案,但它只适用于16:

#include <stdio.h>
char Buffer[65];
int i = 63;

void Store(int temp){
    Buffer[i]=temp;
    i--;    
}

int main(int argc, char *argv[]){
    Buffer[64]=00;

    int value = atoi(argv[1]);
    int base = atoi(argv[2]);

    printf( "%d in base %d = ", value, base );

    char Table[16] = { '0', '1', '2', '3', '4', '5' , '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

    //Mathmatical algorithm
    while(value !=0){
        int digit = value%base;
        value = value/base;
        Store( Table[digit]);  // or: Buffer[i--] = Table[digit];
    }
    printf("%s\n", &Buffer[i+1]);
}