写一个函数得到两个字符串和数字,函数的签名:
void get_formated_integer(char *format, char *result, int num)
函数根据num
转换给定的数字format
并在变量{中返回一个字符串{ {1}},result
将int转换为数字的二进制,例如,对于调用:%b
然后get_formated_integer("%b",&result, 18);
将获取字符串*result
我的代码:
10010
我的输出:
#include <stdio.h>
void convert_binary(int num)//converts decimal number to binary
{
if(num>0)
{
convert_binary(num/2);
printf("%d", num%2);
}
}
void get_formated_integer(char *format, char *result, int num)
{
if(format[1]=='b')
convert_binary(num);
}
int main()
{
char result[100];
get_formated_integer("%b",&result, 18);
}
我不明白该怎么做
10010
会得到字符串*result
抱歉我的英文
答案 0 :(得分:1)
result
是指向内存区域的指针。我将尝试提供简短的解释,您将找到有关指针here的更多信息(我强烈建议您阅读本教程)。
声明char result[100]
时,为100个字符分配内存区域。指针是一个变量,其值为内存地址,因此您可以更改内存地址的值。基本上,您的函数应该做的是使用格式化的数字创建一个字符串,并将其放在result
指示的内存地址。
答案 1 :(得分:0)
首先,替换
void convert_binary(int num)//converts decimal number to bi
与
void convert_binary(int num, char * result) //converts decimal number to binary
为了有一个地方(result
)来存储结果。
其次,替换它的身体 - 递归呼叫和直接打印
{
if(num>0)
{
convert_binary(num/2);
printf("%d", num%2);
}
}
与
{
static int i = 0; // Offset in result for storing the current digit
if(num>0)
{
convert_binary(num/2, result);
sprintf(result+i, "%d", num % 2);
++i;
} else
i = 0;
}
即。带有递归调用语句(更新函数)和存储部分值。
第三,按照之前的更改,替换原来的定义
void get_formated_integer(char *format, char *result, int num)
{
if(format[1]=='b')
convert_binary(num);
}
与
void get_formated_integer(char *format, char *result, int num)
{
if(format[1]=='b')
convert_binary(num, result); // Only this is different
}
四,在main()
函数的末尾放置打印结果的语句(因为我们在递归调用存储中更改了直接打印):
printf("%s\n", result);