我需要输入一个字符串作为输入,丢弃不是空格,连字符或数字的eveything。换句话说,我只想要读入正整数和负整数。 我对使用scanf没有任何不满,但我更喜欢它。
到目前为止我尝试的是:
char buffer[200];
scanf("%[0-9 ' ']*%c", buffer); /*this works perfectly, except the hyphen part*/
scanf("%[0-9 - ' ']%*c", buffer); /*no change*/
scanf("%[0-9 '-' ' ']%*c", buffer); /*still no change*/
显然一次只试过其中一个。
感谢您提供的任何见解或帮助。
答案 0 :(得分:0)
我很惊讶这对你有用:
scanf("%[0-9 ' ']*%c", buffer);
^--- There's a typo, here. The * should probably be after the %.
更紧迫的问题......在C11标准中,在§7.21.6.2p12部分,在[
转换说明符下,有一些句子可以解释:
如果 - 字符在扫描列表中并且不是第一个,也不是 第二个,第一个字符是^,也不是最后一个字符, 行为是实现定义的。
结果,我建议两件事:
0-9
可移植地表示扫描集中的字符范围0123456789
。你最好明确说明0123456789
。-
。我建议这样的事情:
assert(scanf("%[- 0123456789]%*c", buffer) == 1);
您需要来检查返回值。如果scanf
返回0或EOF
,则使用buffer
无法预期任何明确定义的内容。我将-
放在扫描集的开头,以便明确定义,并将0-9
扩展为0123456789
,如前所述。
我希望有帮助:)