我的代码有什么问题,如果b!=-1则不返回值

时间:2018-09-19 17:02:03

标签: c function return

我的代码有什么问题,如果b!=-1

不会返回值
 #include <stdio.h>

int find_even(int k){
    int a,b,i=0;
    scanf("%d",&a);
    while (a>=0){
        if(i<k){
            if (a>=0 && a%2 == 0){
                b=a;
                i++;
            }

        }
        scanf("%d",&a);
    }
    if (i<k){
        b=-1;
    }
    return b;

}

void main(){
    int k;
    printf("Enter the value of K : ");
    scanf("%d",&k);
    printf("Enter the sequence of non negative integers and at end enter a negative integer  : ");
    if (find_even(k)<0)
        printf("No %dth even integer exist.",k);
    else
        printf("Result = %d. ",find_even(k));
}

我试图获取第k个偶数,但是只要b的值不等于-1,我都不会返回任何值

1 个答案:

答案 0 :(得分:0)

除非输入-1,否则似乎没有输出的原因是,必须输入至少k个偶数才能使(i<k)为真。每次在循环中输入正偶数时,我都会递增:

if (a>=0 && a%2 == 0){
    b=a;
    i++;  // here

因此,如果您输入正偶数(例如2)超过k次,则结果将不是-1。

从函数返回后,如果结果为负,则执行以下操作:

printf("No %dth even integer exist.",k);

如果结果是肯定的,则再次返回该函数:

printf("Result = %d. ",find_even(k)); // This is going to re-enter find_even

我认为您要保存的是函数调用的结果并对其执行操作。像这样:

int result = find_even(k);
if (result<0)
    printf("No %dth even integer exist.",k);
else
    printf("Result = %d. ", result);

编辑:我想我知道您现在要做什么。鉴于请求和屏幕上的排列方式,这有点令人困惑。在\n的末尾添加一个printf,以减少终端上的混乱:

printf("Enter the sequence of non negative integers and at end enter a negative integer  :\n");

现在,所有输入将对齐并变得更有意义。

另外,请注意scanf(),因为它不是最可靠的功能。这对修补是有好处的,但对于通用用途而言是不安全的。请查看this小指南,以获取有关scanf的更多信息以及正确使用它的所有复杂之处。