sscanf无法检测到数字C.

时间:2017-05-03 02:03:07

标签: c scanf

所以我使用sscanf在中编写了这个函数。

int parse_charstar(char *pointah)
{
    int numbeh;
    int retaahn = sscanf(pointah,"%*[^0123456789]%d",&numbeh);   

    printf("\n prent deeh numbeeh %d \n",numbeh);

    return numbeh;
}

我想从字符串中获取一个数字,例如:

"hello 121"
number: 121

目前使用上述我获取垃圾值,有人可以帮忙吗?

编辑:

所以我今天发现了一些有趣的东西。显然,这就是发生的事情!

我的代码从来没有错,如luoluo和dasblinkenlight所指出的那样。

问题是我是如何调用该程序的。我在linux上。

我把它称为:

parse_charstar("1000");

输出:

prent deeh numbeeh -1634553883

我试过了:

parse_charstar(" 1000 "); // added spaces

输出

prent deeh numbeeh 1000

专注于。

现在有人可以告诉我为什么会这样吗?

修改!!!

与其他人一起玩,使用 strtol ,这是为这些东西制作的。

http://www.cplusplus.com/reference/cstdlib/strtol/

从上页无耻地复制代码:

#include <stdio.h>      /* printf */
#include <stdlib.h>     /* strtol */

int main ()
{
  char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
  char * pEnd;
  long int li1, li2, li3, li4;
  li1 = strtol (szNumbers,&pEnd,10);
  li2 = strtol (pEnd,&pEnd,16);
  li3 = strtol (pEnd,&pEnd,2);
  li4 = strtol (pEnd,NULL,0);
  printf ("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1, li2, li3, li4);
  return 0;
}

2 个答案:

答案 0 :(得分:0)

sscanf的更受限制的版本将是

int retaahn = sscanf(pointah,"%*[^0-9]%d%*[^0-9]",&numbeh);

请注意,这不会更改格式字符串中的任何内容。我刚刚使用0-9来提及范围,并添加了第二个%*[^0-9]以使事情更加明确。

  

目前使用上面我得到的垃圾值,可以有人   帮助

可能是因为你没有将正确的参数传递给函数。做一个

printf("pointah : %s\n",pointah);

查看传递的内容或设置断点并调试程序。

答案 1 :(得分:0)

因为我的代码从来没有错,所以我的问题是我是如何调用这个函数

这就是我解决它的方法:

我把它称为:

parse_charstar("1000");

我试过了:

parse_charstar(" 1000 "); // added spaces

它有效!

检查我的编辑内容以获取更多信息!!