正值输入 C
Positive value input C
这个函数的想法是要求一个正值,并确保不会使用递归插入一个负值。
然而,当我测试它时,如果我输入的第一个值是负数,而函数工作并且在输入正值之前不允许代码继续,代码仍然打印插入的第一个值,无论如果它满足 return.
的要求
#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());
}
首先认识到递归不是适合这里的技术。
您应该使用 while 循环。
但是如果您出于任何作业目的需要递归:
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;
}
也许你应该记得保存 return 值:
x = scanval()
函数内部。
您应该能够轻松完成以下操作:
if(x<0){
printf("Not a valid value \n");
return scanval();
}
当然,最佳做法是在一个函数中只包含一个 return,但我认为您不会关心这一点,因为您正试图通过递归来完成此任务!
你可以做的另一件事是这个
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()
将 return 1
,因此检查它也很重要。
并且您还需要从输入缓冲区中删除剩余的空格,为此您可以使用这个
int chr;
while (((chr = getchar()) != EOF) && (chr != '\n'));
如果您不检查有效输入,您可能会在 x
未初始化时访问它,从而导致未定义的行为。
这个函数的想法是要求一个正值,并确保不会使用递归插入一个负值。
然而,当我测试它时,如果我输入的第一个值是负数,而函数工作并且在输入正值之前不允许代码继续,代码仍然打印插入的第一个值,无论如果它满足 return.
的要求#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());
}
首先认识到递归不是适合这里的技术。
您应该使用 while 循环。
但是如果您出于任何作业目的需要递归:
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;
}
也许你应该记得保存 return 值:
x = scanval()
函数内部。
您应该能够轻松完成以下操作:
if(x<0){
printf("Not a valid value \n");
return scanval();
}
当然,最佳做法是在一个函数中只包含一个 return,但我认为您不会关心这一点,因为您正试图通过递归来完成此任务!
你可以做的另一件事是这个
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()
将 return 1
,因此检查它也很重要。
并且您还需要从输入缓冲区中删除剩余的空格,为此您可以使用这个
int chr;
while (((chr = getchar()) != EOF) && (chr != '\n'));
如果您不检查有效输入,您可能会在 x
未初始化时访问它,从而导致未定义的行为。