WSL(ubuntu) printf выводит только тот же текст

#c #printf

#c #printf

Вопрос:

У меня проблема. Мой код:

 #include <stdio.h>

int readInteger() {
        int x,y;
        printf("variable 1 :");
        scanf("%d", amp;x);
        return x;
        printf("variable 2 :");
        scanf("%d", amp;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: ...
  

Комментарии:

1. Разгон не имеет значения. WSL не имеет значения. Компьютер делает именно то, что вы ему сказали. Вы знаете, что return делает?

2. Если вы ожидаете, что функция продолжит работу с того места, где она остановилась после a return , она так не работает. Функции начинаются в начале каждого вызова. Кроме того, вы не должны ничего передавать своей функции.

3. Пожалуйста, прочитайте документ о том, что делает return . Вы можете найти все, что связано с ним, на geeksforgeeks или tutorialspoint.

Ответ №1:

Проблема в том, что return означает «завершить выполнение функции здесь». Итак, у вас есть

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

что, из-за return x строки, эквивалентно

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

Одно быстрое решение — удалить return x; строку. Хотя тогда он не будет делать именно то, что вы хотите, чтобы функция выполняла, поскольку вы хотите прочитать 2 целых числа и вернуть их.

Лучшее решение — передать строку функции в качестве аргумента, а затем вызвать ее дважды:

 
int readInteger(const char* prompt) {
        int x;
        printf(prompt);
        scanf("%d", amp;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 ) .

Комментарии:

1. Спасибо за комментарий. Мне просто пришлось изменить «printf (приглашение)» на «printf («% s», приглашение)», потому что gcc выдал ошибку с вашей версией.