C scanf无法在递归函数中工作

时间:2014-06-25 23:46:04

标签: c scanf

我正在尝试编写一个函数,它接受并检查输入是否为1到1000之间的整数。如果不是,则调用自身。但是,如果我输入错误的输入,例如“F”,它不会停止扫描,而是变成无限循环。有什么建议吗? 它与输入缓冲区有关吗?

#include <stdio.h>

int num,input;


int take_input()
{ 
  num =  scanf("%d", &input);

  if( num != 1 || input < 1 || input > 1000 )
  {
    printf("input must be between 1 and 1000");
    take_input();
  }
  return 1;
}

int main()
{  
  take_input();
}

2 个答案:

答案 0 :(得分:1)

首先:你不需要在第二次测试中检查是否(num!= 1)......只有在第一次测试为假时才会到达那里。

第二:您只传递一个要读取的参数:scanf将返回1或0(如果它没有正确读取)。所以会发生的情况是:如果您读取一个数字,那么 num 将具有值1,您将在第一个if之后立即退出。

要使你的递归工作,你必须:

 if(num != 1 )
    return 1;
 if( input < 1 || num > 1000 ) 
 {
    printf("input must be between 1 and 1000");
    take_input();
 }

这样,当前值不在指定的时间间隔内时,它会继续询问新值。

答案 1 :(得分:0)

take_input if语句应该检查输入变量而不是num。 当您执行scanf时,您可以存储您在&amp; input中读取的内容的结果。更换 num with input。