正值输入C.

时间:2015-02-09 17:43:48

标签: c function recursion input

这个函数的想法是要求一个正值,并确保使用递归不插入负值。

然而,当我测试它时,如果我输入的第一个值是负数,而该函数有效并且不允许代码继续进行直到输入正值,代码仍会打印插入的第一个值,无论它是否为满足了回报的要求。

#include <stdio.h>

float scanval()
{
  float x;
  printf("Insert positive value \n");
  scanf("%f", &x);

  if(x<0){
    printf("Not a valid value \n");
    scanval();
  }

  return x;
}

main()
{
  printf("Value given %f \n", scanval());
}

4 个答案:

答案 0 :(得分:2)

也许你应该记得保存返回值:

x = scanval()

在函数内部。

答案 1 :(得分:0)

首先要认识到递归不是这里适当的技术 你应该使用 循环。

但如果你需要递归用于任何作业目的:

float scanval()
{
  float x;
  printf("Insert positive value \n");
  scanf("%f", &x);

  if (x<0){                          // While x is negative, 
    printf("Not a valid value \n"); // Showing an error message, 
    x = scanval();                 // Try the routine again.
  }

  return x;
}

答案 2 :(得分:0)

你应该能够做到以下几点:

    if(x<0){
    printf("Not a valid value \n");
    return scanval();
  }

当然,最佳做法是在一个函数中只返回一个,但我不认为你关心它,因为你试图用递归来完成这个任务!

答案 3 :(得分:0)

你可以做的另一件事是这个

float scanval()
{
    float x;

    printf("Insert positive value \n");

    if ((scanf("%f", &x) != 1) || (x < 0))
    {
        int chr;
        while (((chr = getchar()) != EOF) && (chr != '\n'));
        return scanval();
    }
    return x;
}

请注意,我还检查输入是否有效,在这种情况下,有效输入scanf()将返回1,因此检查它也很重要。

您还需要从输入缓冲区中删除剩余的空格,您可以使用此

int chr;
while (((chr = getchar()) != EOF) && (chr != '\n'));

如果您没有检查有效输入,则在未初始化导致未定义行为时,您可能会访问x