Основная проблема в вашем коде заключается в функции reorder_range
: вы меняете только значения внутри этой функции, без какого-либо побочного влияния на переменные в вызывающей функции. Аргументы передаются по значению в C, поэтому изменение аргументов внутри функции не приводит к изменению переменных в вызывающей функции. Передача указателей на переменные для переупорядочения является способом решения этой проблемы.
Существуют и другие проблемы:
пропуск типа возврата при определении функции является устаревшим синтаксисом , main
должен быть определен как int main()
или int main(void)
, reorder_range
должен иметь тип возврата void
.
do_the_sum()
должен принимать только границы диапазона, не индекс, а сумма переменных. Вы должны определить их как локальные переменные.
Вы должны определить или хотя бы объявить функции перед их вызовом.
Вот исправленная версия :
#include <stdio.h>
#include <stdlib.h>
void check_if_valid_value(int res) {
if (res != 2) {
printf("You have not entered two integers.\n");
exit(1);
}
}
int reorder_range(int *p, int *q) {
if (*p > *q) {
int aux = *p;
*p = *q;
*q = aux;
}
}
int dothesum(int p, int q) {
int i, sum = 0;
for (i = p; i <= q; ++i) {
sum = sum + i;
}
return sum;
}
int main() {
int res, p, q;
printf("Enter two integers:");
res = scanf("%d%d", &p, &q);
check_if_valid_value(res);
reorder_range(&p, &q);
printf("%d\n", dothesum(p, q));
return 0;
}
Обратите внимание, однако, что вам не нужно больше одной функции для вашей задачи:
#include <stdio.h>
int main() {
int p, q, i, sum;
printf("Enter two integers: ");
if (scanf("%d%d", &p, &q) != 2) {
printf("You have not entered two integers.\n");
return 1;
}
if (p > q) {
int aux = p;
p = q;
q = aux;
}
sum = 0;
for (i = p; i <= q; i++) {
sum += i;
}
printf("%d\n", sum);
return 0;
}
Наконец, for
l oop можно опустить и результат вычисляется напрямую следующим образом:
printf("%d\n", (p + q) * (p - q + 1));
Используя это простое выражение, даже переупорядочение диапазона больше не требуется:
#include <stdio.h>
#include <stdlib.h>
int main() {
int p, q;
printf("Enter two integers: ");
if (scanf("%d%d", &p, &q) != 2) {
printf("You have not entered two integers.\n");
return 1;
}
printf("%d\n", (p + q) * (abs(p - q) + 1));
return 0;
}