【问题标题】:Is there a way to use sscanf with stdin?有没有办法将 sscanf 与标准输入一起使用?
【发布时间】:2012-10-08 03:24:23
【问题描述】:

我有一个程序可以从文件或标准输入中获取数据。 我编写了使用 sscanf 扫描文件的代码。 我想知道是否可以重用该代码,但使用标准输入而不是使用 scanf?

例如:

如何修改它以使其适用于标准输入?

while(fgets(buffer, MAX_LEN, input) != NULL) { 
    if (sscanf(buffer, "%s %s %s", one, two, three) == 3) { } 
}

【问题讨论】:

  • sscanf 从 char* 解析数据。所以根本没有文件。你可能想从标准输入读入缓冲区,而不是从某个文件读入缓冲区。
  • 看看可以从标准输入读取的 fscanf
  • 可能你需要的是fscanf,第一个参数会指定数据源。

标签: c stdin scanf


【解决方案1】:

您无需更改 sscanf() 调用 - 这是从输入文件读取的 fgets() 调用。

您可以通过在fgets() 调用中将input 替换为stdin 来更改您的代码sn-p 以使用stdinstdin 是在stdio.h 中声明的全局FILE *,它指的是到标准输入)。

【讨论】:

  • 当然,你也可以指定input = stdin;,因为它只是一个指针。
【解决方案2】:

fgets(buffer,MAX_LEN,input) 中的第三个参数,即input 是输入的来源。在您的情况下,它应该替换为stdin,以便它从标准控制台而不是文件中获取输入。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 开玩笑吧?如果提问的人知道如何使用 fgets 和 scanf,那么他们肯定知道如何使用 fscanf。他们显然只是不知道它的存在。
    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2018-03-15
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多