[英]formatted input using scanf()
我需要将字符串作为输入,舍弃不是空格,连字符或数字的形式。 换句话说,我只希望读正和负整数。我对使用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*/
显然一次只能尝试其中之一。
感谢您提供的任何见解或帮助。
我很惊讶这对您有用:
scanf("%[0-9 ' ']*%c", buffer);
^--- There's a typo, here. The * should probably be after the %.
在更紧迫的问题上...在C11标准的第7.2.1.6.2p12节中, [
转换说明符下有一些句子解释:
如果-字符在扫描列表中,并且不是第一个字符,也不是第二个字符(第一个字符是^),也不是最后一个字符,则该行为是实现定义的。
结果,我建议两件事:
0-9
代表扫描集中字符0123456789
范围。 您最好明确声明0123456789
。 -
因为你想它。 我建议是这样的:
assert(scanf("%[- 0123456789]%*c", buffer) == 1);
您需要检查返回值。 如果scanf
返回0或EOF
,那么您就不能期望使用buffer
定义任何东西。 我将-
放在扫描集的开头,以便定义明确,并如前所述将您的0-9
扩展为0123456789
。
希望对您有所帮助:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.