我需要解决以下练习:
"编写一个程序,获取字符串的第一个字符和整数八进制,并将其写入另一个先前为空的字符串,然后使用函数
sscanf
以十进制显示第二个字符串的内容。sprintf
。 例如,如果用户输入12(八进制),则系统必须显示10(十进制)。"
在scanf
之后,数组seconda
为="12325"
。
问题是我不知道如何理解这个字符串是一个八进制数,以及如何用sprintf
将其转换为十进制。
这是我目前的代码:
#include <stdio.h>
int main(void) {
char prima[] = "12325dsdfa";
char secodna[500];
sscanf_s(prima, "%[0123456789]o", secodna, 500);
}
答案 0 :(得分:4)
您误用%o
,将其与字符集格式%[]
混合,并传递过多参数。
您应该只使用%o
,它会将无符号整数八进制转换为尽可能多的字符。
然后使用%u
sprintf()
转换回十进制字符串。
这样的事情:
#include <stdio.h>
int main(void) {
unsigned int x;
if(sscanf("12foo", "%o", &x) == 1)
printf("%u\n", x);
return 0;
}
请注意,上面将十进制字符串输出到stdout而不是保持它(即它使用printf()
而不是sprintf()
),但这是微不足道的改变。它打印&#34; 10
&#34;。
答案 1 :(得分:1)
将它转换为二进制整数变量(使用sscanf())后,使用带有%u格式的sprintf()将其输出到相应的字符串。
确保首先定义了适当的缓冲区。
unsigned int intbuf;
char myinput[80];
char myoutput[80];
strcpy(myinput, "12345");
sscanf(myinput, "%o", &intbuf);
sprintf(myoutput, "%u", intbuf);