如何使用“scanf”输入特定字母?

时间:2013-10-24 15:01:10

标签: c regex scanf

从我在高中的知识。

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

它的意思是输入可以是任何字符,但大写字母除外。

但是如果我想接收输入字符[A-F]我怎么能这样做?

在我看来,它应该写成这样:

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

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

所以,当我运行它

$./a.out 
asdfasdfABC 
`[]@

[]是一些外星人,但我不能打字。

2 个答案:

答案 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");