可变scanf输入

时间:2017-04-08 09:38:22

标签: c scanf

你究竟如何处理可变数量的scanf输入? 我正在扫描命令,其中一些是1.字命令,但有些需要数字参数。 scanf是否允许以下​​内容?

int

如果仅输入一个值,是否会忽略“参数”? 我的另一个选择是

 scanf(" %s %d", command, argument);

但这会创建换行吗?终端必须以“>命令参数”的形式接收输入 所以,我的问题是,如何解决输入数量可变的问题。

1 个答案:

答案 0 :(得分:2)

不,它不会“创建换行符”。 scanf完全没有意识到任何换行符。 scanf将输入流视为由空格分隔的线性数据序列。换行符只是空格,与其他任何空格都没有区别。唯一可以“查看”换行符的scanf格式说明符是%c%[]。您的%s%d完全不属于换行符。

这意味着您的第二个示例正确执行(在scanf的自然限制内)。它不会“创建换行符”。如果您在一行中提供输入(例如somethin 42),它将读取一行。

你可能会遇到“相反”的问题:如果用户忘记在一行中输入所需的参数,下一个scanf将在下一行等待它。并在下一行。并在下一行...直到他的用户终于提供它。我不确定这种行为对你来说是否合适。如果没有,那么更好的想法是通过fgets使用专用的基于行的输入,然后手动解析该行。

P.S。没有理由在%s%d前加上空格。