c - 可变扫描输入

标签 c scanf

您将如何处理可变数量的 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/

相关文章:

c - 为什么 clang 无法展开循环(gcc 展开)?

c - scanf 后出现段错误?

c - 如何使用 fscanf 和数组读取名字和姓氏的文件

c++ - 使用 MPFR 计算不同精度的次正规数

c - 传递 'printf ' 的参数 1 使指针来自整数

c - 用户输入零以表示 C 中输入的结束

c - fscanf 读取文件中不存在的行

c - 从文件中读取带空格的字符串

c++ - 如何一步获得商和余数?

c - 未找到 .ino 中声明的函数