首页 > 解决方案 > WSL(ubuntu) printf 只输出相同的文本

问题描述

我有个问题。我的代码:

#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: ...

标签: cprintf

解决方案


问题是因为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 个整数并返回它们。

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


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在您的原始代码中,则不应使用参数(int x = readInteger(x)in main)调用它。


推荐阅读