WSL(ubuntu) printf 只输出相同的文本

WSL(ubuntu) printf only outputs the same text

我有问题。我的代码:

#include <stdio.h>

int readInteger() {
        int x,y;
        printf("variable 1 :");
        scanf("%d", &x);
        return x;
        printf("variable 2 :");
        scanf("%d", &y);
        return y;
}

int compare (int, int);

int main() {
        int x = readInteger(x);
        int y = readInteger(y);
        printf("%d is greater", compare(x,y));
        return 0;
}

int compare(int x , int y) {
        if(x > y) return x;
        else return y;
}

只输出

variable 1: ...
variable 1: ...

而不是

variable 1: ...
variable 2: ...

这个问题是因为return的意思是“在这里结束函数执行”。所以,你有

int readInteger() {
        int x,y;
        printf("variable 1 :");
        scanf("%d", &x);
        return x;
        printf("variable 2 :");
        scanf("%d", &y);
        return y;
}

由于 return x 行,它等同于

int readInteger() {
        int x,y;
        printf("variable 1 :");
        scanf("%d", &x);
        return x;
}

一个快速修复方法是删除 return x; 行。虽然那样它不会完全按照您希望函数执行的操作执行,因为您想要读取 2 个整数和 return 它们。

更好的解决方法是将字符串作为参数传递给函数,然后调用它两次:


int readInteger(const char* prompt) {
        int x;
        printf(prompt);
        scanf("%d", &x);
        return x;
}

int main() {
        int x = readInteger("variable 1 :");
        int y = readInteger("variable 2 :");
        printf("%d is greater", compare(x,y));
        return 0;
}

PS。如果函数没有参数(原始代码中的readInteger,则不应使用参数调用它(main 中的int x = readInteger(x))。