цикл while в программировании на C - PullRequest
0 голосов
/ 04 августа 2010

Напишите программу, которая содержит цикл

while (scanf("%1f", &salary) == 1) {...}

в теле цикла, рассчитайте 17% федеральный подоходный налог и 3% штатный подоходный налог и напечатайте эти значения вместе с соответствующей зарплатой.Накопить суммы всех заработных плат и налогов напечатаны.Распечатайте эти суммы после того, как программа выйдет из цикла while.

Мой текущий код:

float salary, federal_tax, state_tax, salary_after_tax, salary_sum, tax_sum, salary_after_tax_sum;
printf("Enter Salary: $");
while (scanf("%lf", &salary) == 1)
{
salary_sum = salary;
federal_tax = salary*(.17);
state_tax = salary*(.03);
tax_sum = federal_tax + state_tax;
salary_after_tax = salary - federal_tax - state_tax;
salary_after_tax_sum = salary_after_tax;
printf("Salary before tax = %lf", salary);
printf("Federal tax = %lf", federal_tax);
printf("State tax = %lf", state_tax);
printf("Salary after tax = %lf\n", salary_after_tax);
break;
}
printf("total salary before tax = %lf", salary_sum);
printf("total tax = %lf", tax_sum);
printf("total salary after tax = %lf\n", salary_after_tax_sum);
system ("pause");
return 0;

}

По какой-то причине это не работает.Любая помощь будет оценена.

Ответы [ 3 ]

3 голосов
/ 04 августа 2010

Ваш scanf спецификатор равен %lf (вместо этого в вашем заявлении о проблеме указано %1f, это намеренно?), И все же вы сохраняете в float. Мой scanf(3) говорит %lf указывает double.

Между прочим, float имеет гораздо меньшую точность, чем многие программисты могут ожидать, всего около семи цифр, поэтому вместо него, вероятно, будет лучше использовать double.

1 голос
/ 04 августа 2010

Вы должны присвоить вашей переменной ..._sum значение 0 вне цикла и увеличить ее на += в цикле;вместо этого то, что вы делаете сейчас, это переназначает их каждый раз через цикл, а это не суммирование ! -)

0 голосов
/ 18 марта 2015

Вы солгали компилятору, и он отомстил: формат %lf должен идти с указателем на двойное число, тогда как вы предоставляете только указатель на плавающее число. Это означает неопределенное поведение в языке C (возможно что угодно).

Исправьте объявления с плавающей точкой, превратив их в двойные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...