1

根据我高中的知识。

scanf("%[^A-Z]s", input);

这意味着输入可以是任何字符,但大写字母除外。

但如果我只想接收输入字符 [AF] 我该怎么做?

在我的意义上,它应该这样写:

scanf("%[A-Z]s", input);

看起来您使用正则表达式,但无论如何它不起作用

所以,当我运行它时

$./a.out 
asdfasdfABC 
`[]@

[] 是一些外星人字符,但我无法输入。

4

2 回答 2

1

问题很可能是您不检查错误,即使scanf调用失败也打印字符串。

使用该模式"%[A-Z]",您只扫描大写字母,如果您输入的字符串不以大写字母开头,scan则会失败。这当然意味着字符串input永远不会被填充,并且将包含您随后打印的随机数据。

我建议您阅读例如此参考。它会告诉您该函数将返回成功扫描的项目数,这应该是1您的情况。如果scanf您的代码中的函数没有返回1,那么就有问题了。

所以你需要做类似的事情

if (scanf(...) == 1)
    printf(...);
else
    printf("Something went wrong when reading input\n");
于 2013-10-24T16:28:08.963 回答
1

在这种情况下,您可以简单地将代码编写为

    scanf("%[A-F]s", input);

现在输入只能从 A 传送到 F。

于 2013-10-24T15:13:28.823 回答