Sscanf和Sprintf将字符串转换为十进制?

时间:2016-01-29 10:24:06

标签: c printf scanf

我需要解决以下练习:

  

"编写一个程序,获取字符串的第一个字符和整数八进制,并将其写入另一个先前为空的字符串,然后使用函数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);
}

2 个答案:

答案 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()将其输出到相应的字符串。

确保首先定义了适当的缓冲区。

sscanf reference

sprintf reference

unsigned int intbuf;
char myinput[80];
char myoutput[80];

strcpy(myinput, "12345");
sscanf(myinput, "%o", &intbuf);
sprintf(myoutput, "%u", intbuf);