C-get_num()函数还是有问题、、

发布于 2016-10-17 06:21:35 字数 878 浏览 1313 评论 6

#include <stdio.h>
#include <math.h>

void get_num(float * px, float * py);//获取两个浮点数
void calculate(double * panswer, float * px, float * py);//计算结果

int main(void)
{
float x, y;
double answer;

printf("请输入两个浮点数:n");
get_num(&x, &y);
calculate(&answer, &x, &y);
printf("二者之差除以二者之积的结果是:n%lf或%lfn",
answer, -answer);

return 0;
}

void get_num(float * px, float * py)
{
while (scanf("%f%f", &*px, &*py) != 2)
{
printf("输入有误!重新输入:n");
while (getchar()!='n')
continue;
}
return;
}

void calculate(double * panswer, float * px, float * py)
{
*panswer = fabs(*px - *py) / (*px * *py);
return;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

灵芸 2017-09-02 08:28:57

不能依赖scanf函数的返回值来判断数字的合法性
scanf返回值只能代表scanf接受的数据的个数,但不代表它接受的是你想要的数据

偏爱自由 2017-07-25 22:29:23

该怎样处理这样的输入?

归属感 2017-06-29 18:00:19

其实按照你图上第二个输入,在scanf看来并不是错误的输入!因为scanf函数会根据格式来读取字符,直到遇到不匹配的输入,或者EOF。
所以

while (scanf("%f%f", &*px, &*py) != 2)

这句是没有问题的。你输入的测试数据1.5 2.5 EF在scanf看来也是没有问题的。
当读到EF的时候,因为它不匹配%f,scanf就会把它当作一个输入结束的标识,然后
返回已经读取到的数据(1.5 2.5)的数量,也就是2。

泛泛之交 2017-03-20 03:25:23

scanf("%f,%fn", &px, &py) ,应该是这个样子,要明确输入的数字的个数

泛泛之交 2017-02-11 22:07:34

 scanf("%f%f", &*px, &*py)

改成

 scanf("%f,%f", &*px, &*py)

试试

夜无邪 2016-12-10 01:05:00

scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
所以,你的第一种输入时,是scanf遇到EF非法字符,且两个数据域都有了数据,所以正常结束;第二种,是由于遇到EF前的空格时,每个数据域都有数据,所以正常结束。

另外,scanf在输入一个Enter(回车),才有可能结束scanf的输入,在这种情况下,多输入了几个数据是很有可能的。因此,用scanf来控制“输入”数据的个数,是比较困难的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文