【问题标题】:Sscanf and Sprintf convert string to decimal?Sscanf 和 Sprintf 将字符串转换为十进制?
【发布时间】:2016-05-07 01:04:47
【问题描述】:

我需要解决以下练习:

“编写一个程序,获取一个八进制整数字符串的第一个字符并将其写入另一个先前为空的字符串,然后使用函数sscanfsprintf 以十进制显示第二个字符串的内容。 例如,如果用户输入 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);
}

【问题讨论】:

  • 从字符串 -> int -> 字符串...
  • unsigned oct_value; sscanf_s(prima, "%o", &amp;oct_value); sprintf(secodna, "%u", oct_value);
  • @BLUEPIXY 如果你想使用 sprintf_s?

标签: c printf scanf


【解决方案1】:

一旦它被转换为二进制整数变量(使用 sscanf()),使用 sprintf() 以 %u 格式将其输出到适当的字符串。

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

sscanf reference

sprintf reference

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

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

【讨论】:

  • @chux 谢谢我一大早就打字太快了。我会解决的
【解决方案2】:

您误用了%o,将其与字符集格式%[] 混合在一起,并且还传递了太多参数。

您应该只使用%o,它会将无符号整数八进制转换为尽可能多的字符。

然后使用%usprintf() 转换回十进制字符串。

类似这样的:

#include <stdio.h>

int main(void) {
    unsigned int x;
    if(sscanf("12foo", "%o", &x) == 1)
        printf("%u\n", x);
    return 0;
}

请注意,上面将十进制字符串输出到标准输出而不是保留它(即它使用printf() 而不是sprintf()),但这很容易改变。它打印“10”。

【讨论】:

  • sscanf_s(prima, "%hho", secodna, 500); 我收到此错误'sscanf_s' : too many arguments passed for format stringplaceholders and their parameters expect 1 variadic arguments, but 2 were provided
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
相关资源
最近更新 更多