У меня есть этот простой проект, в котором я должен создать 4 массива и ввести данные о сотрудниках, массивы: идентификатор сотрудника, их зарплата, сокращение зарплаты и чистая зарплата. Я также должен печатать среднюю зарплату, номер ID сотрудника с самой высокой зарплатой и идентификатор сотрудника с минимальным разрезом.Ввод буквы в массив чисел
Код работает нормально, за исключением случаев, когда я ввожу букву, тогда она просто выполняет всю программу в странном виде (без форматирования, случайных чисел).
Почему? Письмо преобразуется в целое число, верно? Что заставляет его перестать работать должным образом?
Кроме того, не могли бы вы взглянуть на стиль кодирования, который я использовал, и сказать мне, есть ли способ улучшить его?
#include <stdio.h>
#define SIZE 100
int main(void){
int n; /*Number of employees*/
float average; /*Average of the employee's salary*/
int max; /*Highest salary*/
int min; /*Minimum cut*/
int i;
int employee_number = 1;; /*The number (index +1) of the employee*/
float sum = 0; /*The sum of the employee's salary*/
int num_highest; /*The number of the employee with the highest
salary*/
int num_lowest; /*The number of the employee with the lowest cut*/
int id_number[SIZE]; /*Array to hold employee's IDs in*/
float salary[SIZE]; /*Array for employee's salaries*/
float cuts[SIZE]; /*Array for salary cuts*/
float net_salary[SIZE]; /*Net salary after cuts*/
printf("Enter the number of employees\t");
scanf("%i", &n);
for(i = 0; i < n; i++){
printf("Enter the ID of employee #%i\t", employee_number);
scanf("%i", &id_number[i]);
printf("Enter the salary of employee #%i\t", employee_number);
scanf("%f", &salary[i]);
printf("Enter the salary cut of employee #%i\t", employee_number);
scanf("%f", &cuts[i]);
employee_number++;
}
for(i = 0; i < n; i++){
net_salary[i] = salary[i] - (salary[i] * cuts[i] * 1/100);
}
for(i = 0; i < n; i++){
sum += net_salary[i];
}
average = sum/(float)n;
printf("The average salary is %.2f\n", average);
max = net_salary[0];
min = cuts[0];
for(i = 0; i < n; i++){
if(net_salary[i] > max){
max = net_salary[i];
num_highest = i;
}
if(cuts[i] <= min){
min = cuts[i];
num_lowest = i;
}
}
printf("Employee with ID # %i has the highest salary which is %i\n", id_number[num_highest], max);
printf("Employee with ID # %i has the lowest cut of %i and a base salary of %.2f", id_number[num_lowest], min, salary[num_lowest]);
}
'min' и 'max' должен быть' float', а их спецификаторы формата 'printf' изменены на'% f'. –
Используя float, вы также делаете свой код уязвимым для ошибок округления, а именно: если сумма> ¤ 1,67M с точностью 0,01, то будет потеря точности. –
@ Аннет Хаапала Я заметил точность потери, но я не знаю, как ее исправить? Что, если есть сокращение от «11.23», как я могу выразить это без использования float? – MichaelX