#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 выдал ошибку с вашей версией.