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