【发布时间】:2013-04-04 03:43:09
【问题描述】:
嗨,我正在尝试使用 sscanf 来测试一个字符串是否为整数,但它总是给出零作为返回值(j),当它给出 1(有时没有任何更改)时,它没有在应收账款中填充正确的值变量(i)!这是我的代码:
#include <stdio.h>
int main ()
{
char sentence []="123456";
int i=0;
j = sscanf(sentence,"%[0-9]",&i);
return 0;
}
请让我知道我哪里出错了!我知道还有其他方法可以测试字符串的整数,但我想知道我哪里出错了! 帮助将不胜感激!在此先感谢
【问题讨论】:
-
您将数组
sentence声明为类型char,因此它将包含字符。尝试int sentence2[5] = {1,2,3,4};并检查输出。 -
测试一个前导整数很容易。
%d。还是您需要比这更钝的东西? set-notation 仅适用于 char 类型(包括字符串),而不适用于整数。所以无论这需要改变什么。 -
我在这里有些困惑..根据我的理解,它将检查变量句子中的值,如果它在 0-9 之间,它将成功转换,如果不是,则不会并返回 0 。如果我是对的,那么它应该返回 1 。如果我错了,请纠正我,因为我无法完全理解你们提出的建议! :(
-
你很困惑。正如我在上面和下面所说的,基于集合的格式说明符(即格式字符串中的
[0-9])只能提取 character 数据。 IE。它需要进入一个 character 缓冲区。如果能够提取字段,sscanf()将返回 1。这是正确的。查看documentation forsscanf()了解更多信息。但最重要的是,实现使用基于集合的格式说明符进行扫描时不会发生字符到整数的转换。
标签: c