Прежде всего, включите предупреждения. Компиляторы C обычно не дают вам предупреждений, обычно это -Wall
, чтобы получить основы (не все). После того, как мы делаем это ...
test.c:17:36: warning: format specifies type 'int' but the argument has type 'double' [-Wformat]
printf("%d $%d\n", year, output);
~~ ^~~~~~
%f
Это говорит нам, вы передаете число с плавающей запятой в printf
но пытается рассматривать его как целое, так что это будет переведено в строку неправильно. Это должно быть.
printf("%d $%.2f\n", year, output);
%f
для числа с плавающей точкой, а .2
значит использовать только два знака после запятой, как деньги.
test.c:9:14: warning: expression result unused [-Wunused-value]
rate + 0.01;
~~~~^~~~~
2 warnings generated.
Это один говорит нам, что rate
никогда не увеличивается. Он добавлен, но никогда не хранится нигде. Вместо этого вы хотите rate += 0.01
.
Теперь он работает. Однажды. И он сообщает только о годе 11.
Проблема заключается в том, что ваш внешний do/while цикл использует year
, но цикл for
закончится с годом на пороге, поэтому он немедленно остановится. Вместо использования цикла do/while, который редко необходим, используйте другой цикл for.
Вторая проблема заключается в том, что вы печатаете выходные данные и год вне цикла year
for
. Таким образом, вы получите результат только за последний год. Если вы хотите все годы, печать идет внутрь.
#include <stdio.h>
int main(void)
{
const double initial_loan = 1000.00;
for(double rate = 0.01; rate <= 0.10; rate += 0.01) {
double loan = initial_loan;
for (int year = 1; year <= 10; year++) {
loan += rate*loan;
printf("%d @ %.2f%% $%.2f\n", year, rate * 100, loan);
}
}
return 0;
}
Обратите внимание, что я объявляю переменные в самом узком объеме. Это говорит вам, когда они подходят для использования, и избегает ошибок, например, пытается использовать year
во внешнем цикле.
Много материала C будет чрезвычайно консервативным и предложит объявить все переменные в начале функции. Это необязательно и долгое время не было. Хотя объявление переменных в цикле for
является вещью C99, эта часть C99 очень хорошо поддерживается.
'rate + 0.01' ничего не помогает –
Должен ли пользователь вводить что-либо или нет? Я не понимаю, понять, что вы на самом деле хотите сделать. Каким должен быть результат? –
Пользователь ничего не вводит. Программа должна выводить таблицу, показывающую скорость, и процентная ставка по этой ставке. Таким образом, он должен выставить 10 строк интереса и соответствующую сумму по этой процентной ставке – dreed