【问题标题】:what is the problem with my code, it is not returning value if b!=-1我的代码有什么问题,如果 b!=-1 它没有返回值
【发布时间】:2019-02-23 22:13:54
【问题描述】:

我的代码有什么问题,如果 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 时,我没有得到任何返回值

【问题讨论】:

  • 如果对find_even() 的第一次调用没有返回-1,您将再次调用find_even() 作为printf() 的参数,因此它将scanf() 用于另一个用户输入。我不认为那是你想要的
  • 如果用户在每个提示符处输入 -1 会发生什么?

标签: c function return


【解决方案1】:

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

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);

编辑:我想我明白你现在想要做什么。考虑到请求和屏幕上排列的方式,这有点令人困惑。在printf 的末尾添加\n 以减少终端上的混乱:

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

现在,所有输入都将对齐并且更有意义。

另外,请注意scanf(),因为它不是最可靠的功能。这对修补很有好处,但对于一般用途来说是不安全的。查看this 小指南,了解有关scanf 的更多信息以及正确使用它的所有复杂性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多