【问题标题】:Get input separated by commas + problem getting input获取以逗号分隔的输入 + 获取输入的问题
【发布时间】:2020-04-06 11:06:27
【问题描述】:

我正在尝试在以下param1,param2,param3 中获取用户的输入 问题是我不允许使用scanf。我想将这 3 个参数检索到 3 个不同的变量中,但是: - 我不知道如何获取它们,因为它们用逗号分隔 - 我无法很好地使用 sscanf,从我所见,我认为 fgets 不能帮助我。 例如:

char a1, a2, a3;
printf("Enter data\n");
sscanf(input,"%[^,],%[^,],%[^,]", &a1, &a2, &a3);

我没有被要求输入我想要的参数。我这里有什么遗漏吗?

【问题讨论】:

  • param1,2,3 类型是什么?显示可重现的代码。
  • 你说:“我不允许使用 scanf。”嗯……当你不能使用scanf时,你认为你可以使用sscanf吗?我猜你的老师当时想让你读一个字符,然后自己做解析
  • 你可以使用fscanf()stdin吗?
  • @4386427 是的,我被允许。
  • 您可以使用fgets() 将用户输入从标准输入读取到您的输入缓冲区,然后使用 sscanf() 解析它(或手动使用 strtok())

标签: c input


【解决方案1】:

您可以使用fgetssscanf 喜欢:

char input[10];
char a1, a2, a3;

if (fgets(input, sizeof input, stdin))
{
    if (sscanf(input, "%c,%c,%c", &a1, &a2, &a3) == 3)
    {
        // ok - go on and use a1, a2, a3
    }
    else
    {
        // not good, the input doesn't match the pattern
    }
}
else
{
    // not good, didn't get any input
}

【讨论】:

    【解决方案2】:

    如果您不允许使用scanf,我怀疑是否允许使用它的变体,例如sscanf。看来练习的重点是学习如何手动解析字符串。

    为此,您可以采取多种方法。一种是读取内存中的整行,然后解析它。另一种是逐个字符,在阅读的同时进行解析。

    无论你做什么,你都必须循环并扫描逗号,字符(知道何时转到下一个参数)和结束行\n一个(停止在最后一个),同时将其他字符复制到每个字符串中。

    【讨论】:

    • 我可以使用 sscanf。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多