根据我高中的知识。
scanf("%[^A-Z]s", input);
这意味着输入可以是任何字符,但大写字母除外。
但如果我只想接收输入字符 [AF] 我该怎么做?
在我的意义上,它应该这样写:
scanf("%[A-Z]s", input);
看起来您使用正则表达式,但无论如何它不起作用
所以,当我运行它时
$./a.out
asdfasdfABC
`[]@
[] 是一些外星人字符,但我无法输入。
问题很可能是您不检查错误,即使scanf
调用失败也打印字符串。
使用该模式"%[A-Z]"
,您只扫描大写字母,如果您输入的字符串不以大写字母开头,scan
则会失败。这当然意味着字符串input
永远不会被填充,并且将包含您随后打印的随机数据。
我建议您阅读例如此参考。它会告诉您该函数将返回成功扫描的项目数,这应该是1
您的情况。如果scanf
您的代码中的函数没有返回1
,那么就有问题了。
所以你需要做类似的事情
if (scanf(...) == 1)
printf(...);
else
printf("Something went wrong when reading input\n");
在这种情况下,您可以简单地将代码编写为
scanf("%[A-F]s", input);
现在输入只能从 A 传送到 F。