繁体   English   中英

使用scanf()格式化输入

[英]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节中, [转换说明符下有一些句子解释:

如果-字符在扫描列表中,并且不是第一个字符,也不是第二个字符(第一个字符是^),也不是最后一个字符,则该行为是实现定义的。

结果,我建议两件事:

  1. 您不能依靠0-9代表扫描集中字符0123456789范围。 您最好明确声明0123456789
  2. 你的实现不解释-因为你想它。

我建议是这样的:

assert(scanf("%[- 0123456789]%*c", buffer) == 1);

需要检查返回值。 如果scanf返回0或EOF ,那么您就不能期望使用buffer定义任何东西。 我将-放在扫描集的开头,以便定义明确,并如前所述将您的0-9扩展为0123456789

希望对您有所帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM