C 区分字符和数字的printf

C 区分字符和数字的printf,c,C,我正在尝试制作一个算法,它接受命令行输入并将[1]除以[2](假设[1]和[2]是数字,[2]不是0),但是 出于某种原因,接受字母和数字 我的当前代码无法区分0和字母。我该如何解决这个问题?我一周前才开始编写代码,所以如果我的代码凌乱,我很抱歉,谢谢你能提供的帮助 #include <stdio.h> #include <stdlib.h> int main(int argc, char * argv[]) { if ((atof(argv[2]) == 0))

我正在尝试制作一个算法,它接受命令行输入并将[1]除以[2](假设[1]和[2]是数字,[2]不是0),但是

出于某种原因,接受字母和数字

我的当前代码无法区分0和字母。我该如何解决这个问题?我一周前才开始编写代码,所以如果我的代码凌乱,我很抱歉,谢谢你能提供的帮助

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[])

{

if ((atof(argv[2]) == 0))

{

    printf("invalid input - divide by zero not allowed\n");
    return 0;

}

else if ((atof(argv[1])) && (atof(argv[2])))

{

    float sum = 0;

    sum = (atof(argv[1])) / (atof(argv[2]));

    printf("%f\n", sum);
    return 0;

}

else

    printf("invalid input\n");
    return 0;

}
#包括
#包括
int main(int argc,char*argv[])
{
if((atof(argv[2])==0))
{
printf(“无效输入-不允许被零除\n”);
返回0;
}
如果((atof(argv[1])和&(atof(argv[2]))
{
浮点数和=0;
总和=(atof(argv[1])/(atof(argv[2]);
printf(“%f\n”,总和);
返回0;
}
其他的
printf(“无效输入\n”);
返回0;
}
您可以使用来判断字符是否为数字(以后仍需将其转换为数字值)

但您真正想要的是使用/(没有办法告诉您它失败了),而不必担心手动字符串到数字的转换

float numerator, denominator;
bool success = sscanf(argv[1], "%f", &numerator) == 1;
success = success && (sscanf(argv[2], "%f", &denominator) == 1);
if(success && denominator != 0) { // float to value comparison is almost always a bad idea
    printf("Fraction: %f\n", numerator/denominator);
} else {
    printf("Failure\n");
}
您可以使用来判断字符是否为数字(以后仍需将其转换为数字值)

但您真正想要的是使用/(没有办法告诉您它失败了),而不必担心手动字符串到数字的转换

float numerator, denominator;
bool success = sscanf(argv[1], "%f", &numerator) == 1;
success = success && (sscanf(argv[2], "%f", &denominator) == 1);
if(success && denominator != 0) { // float to value comparison is almost always a bad idea
    printf("Fraction: %f\n", numerator/denominator);
} else {
    printf("Failure\n");
}

您应该使用strof函数而不是atof

float strtof(const char *nptr, char **endptr);
nptr是指向要解释为浮点的字符串的指针。 endptr必须是char指针的地址(这就是为什么它有双星,它是指向char指针的指针)

该函数存储第一个字符的地址,该地址超过endptr所指向的字符指针中解释的最后一个字符


如果未执行任何转换,则返回零,并且nptr的值存储在endptr引用的位置。

您应该使用strof函数而不是atof

float strtof(const char *nptr, char **endptr);
nptr是指向要解释为浮点的字符串的指针。 endptr必须是char指针的地址(这就是为什么它有双星,它是指向char指针的指针)

该函数存储第一个字符的地址,该地址超过endptr所指向的字符指针中解释的最后一个字符


如果未执行任何转换,则返回零,并且nptr的值存储在endptr引用的位置。

您所说的“接受”到底是什么意思?如果输入字母,您希望发生什么?你到底想做什么?如果你想读一行输入,然后分析它,看看它是否是一个数字,为什么不写代码来做呢?在你转换成数字之前先测试字母。当输入为非数字时,您希望一个古老的C语言函数返回什么?如果您向
atof
提供一个字母,它将返回
0.000000
。如果您输入2 4,我希望它输出0.5。如果您输入10,我希望它输出“无效输入-不允许被零除”。如果您输入2A,我希望它输出“无效输入”。您所说的“接受”到底是什么意思?如果输入字母,您希望发生什么?你到底想做什么?如果你想读一行输入,然后分析它,看看它是否是一个数字,为什么不写代码来做呢?在你转换成数字之前先测试字母。当输入为非数字时,您希望一个古老的C语言函数返回什么?如果您向
atof
提供一个字母,它将返回
0.000000
。如果您输入2 4,我希望它输出0.5。如果您输入10,我希望它输出“无效输入-不允许被零除”。如果你输入2A,我希望它输出“无效输入”。你能为初学者扩展关于如何使用双星函数参数的答案吗?你能为初学者扩展关于如何使用双星函数参数的答案吗?我修改了一点,因为我不需要检查分子是否为0。我修改了一点,因为我不需要检查分子是否是0。