2015-06-26 3 views
0

Результат совершенно неправильный, я ожидал, что он напечатает одну строку, затем сканирует мой ввод в переменную, затем распечатает следующую строку, сканирует мой ввод и т. Д. И т. Д. Но он печатает первую строку, то я должен дважды поместить свой номер, чтобы он мог что-то сделать, и это просто под гору оттуда. Любая помощь?Compound Interest Calculator - C

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main(void) 
{ 
    float balance; 
    int years; 
    float interestRateAnual; 
    int frequencyOfInterest; 
    double totalCost; 

    printf("Insert amount of money to be deposited.\n"); 
    scanf("%f\n", &balance); 

    printf("How many years for the interest?\n"); 
    scanf("%d\n", &years); 

    printf("What is the anual interest rate?\n"); 
    scanf("%f\n", &interestRateAnual); 

    printf("How many times per year is the interest compounded?\n"); 
    scanf("%d\n", &frequencyOfInterest); 

    totalCost = pow(balance*(1 + interestRateAnual/frequencyOfInterest), years); 

    printf("After %d years, with an interest rate of %f% per year, ", years, interestRateAnual); 
    printf("the total you will have to pay is %e.\n", totalCost); 


    return 0; 
} 

ответ

3

Пожалуйста, удалите \n из всеscanf():

  1. Заменить scanf("%d\n", &years); с scanf("%d", &years);
  2. Заменить scanf("%f\n", &balance); с scanf("%f\n", &balance);

и так далее ...

Применение «\ п» символ все еще остается на входном потоке после того, как первый вызов зсапЕ завершен, поэтому второй вызов Scanf() читает его.

Если посмотреть на ссылки на scanf вы увидите, что:

строка формата состоит из пробельных символов (любой одиночный символ пробела в строке формата потребляет все доступные последовательные пробельные символы из входного)

Таким образом, \ n вызовет этот эффект, если вы не хотите, чтобы это поведение не учитывалось в \ n:

scanf ("% d", & лет);

В качестве альтернативы, вы можете использовать следующие функции:

void fflushstdin(void) 
{ 
    int c; 
    while((c = fgetc(stdin)) != EOF && c != '\n'); 
} 

очистить свой входной буфер.

+1

Просто добавить дополнительную информацию, а не другой ответ, когда вы включаете '\ n' в формате аргументе зсапа в вашем случае' «% е \ п» ', что вы говорите это сделать, в основном чтение число с плавающей точкой, а затем считывает любые найденные пробелы или символы новой строки, пока не найдет символ без пробелов. – Ediac

4
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main(void) 
{ 
float balance; 
int years; 
float interestRateAnual; 
int frequencyOfInterest; 
double totalCost; 

printf("Insert amount of money to be deposited.\n"); 
scanf("%f\n", &balance); 

printf("How many years for the interest?\n"); 
scanf("%d\n", &years); 

printf("What is the anual interest rate?\n"); 
scanf("%f\n", &interestRateAnual); 

printf("How many times per year is the interest compounded?\n"); 
scanf("%d\n", &frequencyOfInterest); 

totalCost = balance*pow((1 + interestRateAnual/frequencyOfInterest), (years*frequencyOfInterest)); 

printf("After %d years, with an interest rate of %f% per year, ", years, interestRateAnual); 
printf("the total you will have to pay is %e.\n", totalCost); 


return 0; 
}