c - 如何在 C 中获取命令行参数并评估为 int 或 double 时检查边缘情况?

标签 c command-line

所以我有一个作业要弄清楚命令行上的数字是整数还是 double 。

我主要通过以下方式弄明白了:

sscanf(argv[x], "%lf", &d)

其中“d”是 double 。然后我将它转换为一个 int,然后用它自身减去“d”来检查它是否是 0.0。

d - (int)d == 0.0

我的问题是如果命令行参数包含在技术上可以归类为整数的 double 值。

我需要将 3.0 分类为 double,而我的解决方案将其视为 int。 例如初始化程序。

a.out 3.0

我需要它来打印

"3.0 is a double"

但是现在变成了

"3 is an int." 

检查这个的方法是什么?我确实四处寻找类似的问题,这让我找到了当前的解决方案,但我不知道如何解释这个边缘案例。

谢谢。

最佳答案

比如这样的方式:

#include <stdio.h>

int main(int argc, char *argv[]){
    if(argc != 2){
        puts("Need an argument!");
        return -1;
    }

    int int_v, read_len = 0;
    double double_v;
    printf("'%s' is ", argv[1]);
    //==1 : It was able to read normally.
    //!argv[1][read_len] : It used all the argument strings.
    if(sscanf(argv[1], "%d%n", &int_v, &read_len) == 1 && !argv[1][read_len])
        puts("an int.");
    else if(sscanf(argv[1], "%lf%n", &double_v, &read_len) == 1 && !argv[1][read_len])
        puts("a double.");
    else
        puts("isn't the expected input.");
}

关于c - 如何在 C 中获取命令行参数并评估为 int 或 double 时检查边缘情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46250408/

相关文章:

c - 使用 cython_gsl 进行集成(加上将 numpy.array 寻址到 cython)

C - For循环做一个简单的操作,不增加计数器

用于处理注释的 C 命令行解析器

控制台应用程序的 Windows 默认大小

php - 如何获取调用 PHP 脚本的目录

c - MATLAB mexCallMatlab 导致崩溃

bash - 在 tar 发生之前重命名目录名称

windows - XCOPY 是通过 Windows 文件系统复制文件夹/文件的最快工具吗?

linux - 'find' 或任何其他工具可以搜索文件广度优先吗?

c - 将输入过滤为仅数字。 C