【问题标题】:issue with sscanf and comparing numbersscanf 问题并比较数字
【发布时间】:2014-11-26 07:36:45
【问题描述】:

我需要帮助。我的程序开始于: ./proj --tan 1.024 6 10 我通过 Taylor 计算切线' s 多项式。迭代范围是 1 到 13。如果迭代次数高于 13,我需要停止程序,但下面的代码不起作用。

if ((sscanf(argv[3], "%d", &n) >= 14) || (sscanf(argv[3], "%d", &n) < 0))
    {
        return ERROR_WRONG_NUM;
    }
    if ((sscanf(argv[4], "%d", &m) >= 14) || (sscanf(argv[4], "%d", &m) < 0))
        return ERROR_WRONG_NUM;

【问题讨论】:

  • sscanf 返回成功扫描的项目数,而不是扫描的值。你应该调用sscanf一次,然后比较if (n &gt;= 14 || n &lt; 0)

标签: c scanf


【解决方案1】:

sscanf 的返回值是分配的输入项数,失败时是EOF,这不是你所期望的。

在检查来自sscanf 的返回值后,您应该将n 与范围[1,13] 进行比较

items = sscanf( argv[3], "%d", &n );
if ( items != 1 || n < 1 || n > 13 ) 
    return ERROR_WRONG_NUM;

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2011-04-26
    • 2017-09-18
    相关资源
    最近更新 更多