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