所以我有一个作业要弄清楚命令行上的数字是整数还是 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/