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

标签 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,否则您似乎没有得到输出的原因是因为您必须至少输入 k (i<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);

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

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

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

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

关于c - 我的代码有什么问题,如果 b!=-1 它不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52410907/

相关文章:

c - C中这个奇怪的函数定义语法是什么?

c - 从函数返回结构元素的 malloc

java - 为什么 javafx 忽略 main 的返回并仍然启动应用程序?

java - 在 try-catch block 之后返回 null

c++ - 为 while 循环创建超时的最简洁方法是什么?

C 语言函数调用参数很少,但不报错?

python - 使用类在Python中添加两组坐标?

java - 在 Java 上连接的 Oracle 数据库中执行存储过程

c++ - 什么时候在复杂表达式中评估后缀增量运算符?

c - 当一个和两个星号(间接运算符)将参数传递给 C 中的函数时