我需要编写一个请求两个浮点数的程序并打印出值
他们的差异除以他们的产品,并让程序循环通过成对
输入值,直到用户输入非数字输入。我需要使用scanf
来接受输入。
所以,我知道scanf为true / false返回值0或1所以我虽然测试它来完成问题的最后部分,但我想弄清楚如何确保循环返回要求输入。
我的代码是:
int main()
{
double num1, num2, different, product, answer;
printf("please enter 2 floatig point numbers:\n");
printf("number one is?\n");
while (scanf("%lf", &num1) ==1)
{
printf("number two is?\n");
while (scanf("%lf", &num2) ==1)
{
if (num1 > num2)
{
different = num1 - num2;
}
if (num2 > num1)
{
different = num2 - num1;
}
if (num1 == num2)
{
different = 0;
}
product = num1*num2;
answer = different/product;
printf("%lf", answer);
}
printf("you're out!");
}
printf("you're out!");
}
示例输入:
first num 4.5
second num 3.5
输出:
please enter 2 floatig point numbers:
number one is?
4.5
number two is?
3.5
0.063492
我得到了正确的答案,程序一直在运行,但我正在寻找一个解决方案来返回输入请求。
答案 0 :(得分:1)
它只是一个模式来定义你想要的输入数量。更简单的代码版本是
while( scanf("%d %d", &a,&b) == 2 )
//
此处scanf
返回2作为返回值。
所以你正在检查while(2 == 2)
,输入你想要的输入数量
while( scanf("%lf %lf", &num1,&numb2) == 2 )
{
if (num1 > num2)
{
different = num1 - num2;
}
if (num2 > num1)
{
different = num2 - num1;
}
if (num1 == num2)
{
different = 0;
}
product = num1*num2;
}
答案 1 :(得分:1)
你可以这样做:
while(1)
{
printf("number one is?\n");
if(scanf("%lf", &num1) != 1)
{
break;
}
printf("number teo is?\n");
if(scanf("%lf", &num2) != 1)
{
break;
}
if (num1 > num2)
{
different = num1 - num2;
}
if (num2 > num1)
{
different = num2 - num1;
}
if (num1 == num2)
{
different = 0;
}
product = num1*num2;
answer = different/product;
printf("%lf", answer);
}
}
答案 2 :(得分:1)
你应该首先注意到,无论你的scanf
第一次失败,都可能会让它第二次失败。所以这样的循环:
while (scanf("%lf", &a) != 1);
可能会变成无限循环。
此外,当同时读取两个或多个值时,很难跟踪读取的内容和不读取的内容。因此,我建议逐一阅读这些值,形式如下:
void clear_line()
{
char c;
while (scanf("%c", &c) == 1)
if (c == '\n')
return;
}
double read_value(const char *message)
{
double d;
while (1)
{
printf("%s", message);
if (scanf("%lf", &d) == 1)
return d;
if (feof(stdin))
{
printf("Unexpected end of file\n");
return 0;
}
printf("Invalid input\n");
clear_line();
}
}
...
num1 = read_value("Enter first number: ");
num2 = read_value("Enter second number: ");
if (feof(stdin))
/* handle error */
这基本上做的是尝试读取值,直到用户生成正确的值。如果输入不正确,则会消耗并丢弃一行输入,因此用户输入的任何内容都不会影响下一个scanf
并创建一系列错误。