您将如何处理可变数量的 scanf 输入? 我正在扫描命令,其中一些是 1.word 命令,但有些需要数字参数。 scanf 是否允许以下操作?
scanf(" %s %d", command, argument);
如果只输入一个值,是否会忽略“参数”? 我想到的另一个选择是
scanf(" %s", command)
if (strcmp(command, "somethin") {
scanf("%d", argument); }
但这会创建一个换行符吗?终端必须以“>命令参数”的形式接收输入 所以,我的问题是,如何解决输入数量可变的问题。
最佳答案
不,它不会“创建换行符”。 scanf
完全不知道任何换行符。 scanf
将输入流视为由空格分隔的线性数据序列。换行只是空白,与其他任何空白没有区别。唯一可以“看到”换行符的 scanf
格式说明符是 %c
和 %[]
。您的 %s
和 %d
完全与换行无关。
这意味着您的第二个示例是正确的(在 scanf
的自然限制内)。它不会“创建换行符”。如果您在一行中提供输入(如 somethin 42
),它将读取一行。
您实际上可能会遇到“相反”的问题:如果用户忘记在一行中输入所需的参数,下一个 scanf 将在下一行等待它。在下一行。在下一行......直到他的用户最终提供它。我不确定这种行为是否适合您。如果没有,那么更好的办法是通过 fgets
使用专用的基于行的输入,然后手动解析该行。
附言没有理由在 %s
和 %d
前加上空格。
关于c - 可变扫描输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43292450/