【发布时间】:2026-01-06 23:40:01
【问题描述】:
这是我的 C 编程课的作业。该程序计算员工总工资、税金和净实得工资。
程序运行但它自动结束说“分段错误(核心转储) 错误消息说:
第 127 行:警告:从不兼容的指针类型传递“提示”的参数 1
第 13 行:注意:预期为 'char*' 但参数类型为 'char*(*)[5]'
第 143 行:警告:从不兼容的指针类型传递 'PrintOutput' 的参数 1
第 90 行:注意:预期为 'char*' 但参数类型为 'char(*)[20][5]'
我不太了解int 类型,因为我在main() 函数中将first_name 变量声明为数组。
其余的错误我也不明白。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Prompt(char* a, float* b, float* c)
{
int i;
for (i = 0; i < 5; i++) {
printf("Enter name: ");
scanf("%s", &a[i]);
if (strcmp(&a[i],"-1") == 0) {
break;
}
printf("Enter hourly rate: ");
scanf("%f", &b[i]);
if (b[i] == -1) {
break;
}
printf("Enter hours worked: ");
scanf("%f", &c[i]);
if (c[i] == -1) {
break;
}
}
return;
}
void GrossPay(float* grosspay, float* basepay, float* overtimepay,
float* rate, float* hours)
{
int i;
if (hours[i] > 40) {
overtimepay[i] = (hours[i] - 40) * (rate[i]) * 1.5;
basepay[i] = rate[i] * hours[i];
grosspay[i] = rate[i] * hours[i] + (hours[i] - 40) * (rate[i]) * 1.5;
} else {
overtimepay[i] = 0;
basepay[i] = rate[i] * (hours[i]);
grosspay[i] = basepay[i];
}
return;
}
float Taxes(float gross_pay[])
{
int i;
float taxes_owed[5];
for (i = 0; i < 5; i++) {
taxes_owed[i] = 0.2 * gross_pay[i];
}
return taxes_owed[5];
}
float CalculateTotal(float gross_pay[])
{
int i;
float total_pay = 0;
for (i = 0; i < 5; i++) {
total_pay += gross_pay[i];
}
return total_pay;
}
void PrintOutput(char first_name[5], float* rate, float* hours,
float* gross_pay, float* base_pay, float* overtime_pay,
float* taxes_owed, float* net_pay, float* total_pay)
{
int i;
for (i = 0; i < 5; i++) {
printf("\nPay to: %s\n", &first_name[i]);
printf("Hours worked: %5.1f\n", hours[i]);
printf("Hourly rate: $%5.2f\n", rate[i]);
printf("Gross pay: $%5.2f \n", gross_pay[i]);
printf("Base pay: $%5.2f \n", base_pay[i]);
printf("Overtime pay: $%5.2f\n", overtime_pay[i]);
printf("Taxes paid: $%5.2f\n", taxes_owed[i]);
printf("Net pay: $%5.2f\n\n", net_pay[i]);
}
printf("Total paid to all employees= $%5.2f\n", *total_pay);
return;
}
int main()
{
char first_name[20][5];
float rate[5];
float hours[5];
float gross_pay[5];
float base_pay[5];
float overtime_pay[5];
float taxes_owed[5];
float net_pay[5];
float total_pay;
int i;
Prompt(first_name, rate, hours);
GrossPay(gross_pay, base_pay, overtime_pay, rate, hours);
taxes_owed[5] = Taxes(gross_pay);
total_pay = CalculateTotal(gross_pay);
for (i = 0; i < 5; i++) {
net_pay[i] = gross_pay[i] - taxes_owed[i];
}
PrintOutput(&first_name, rate, hours, gross_pay, base_pay, \
overtime_pay, taxes_owed, net_pay, &total_pay);
return 0;
}
对不起,我对编码很陌生,以前从未上过编码课程,现在我非常困惑,尤其是在参数传递方面。
【问题讨论】:
-
一一检查编译器错误并修复它们。一次一行,从第一个错误开始。一旦这些都解决了,请尝试再次运行该程序。不要费心尝试运行编译器警告您有错误的程序。
-
'我不太了解 int 类型'——事实上,我也不懂。错误消息的哪一部分让您认为它与“int 类型”有关?
标签: arrays c pointers parameter-passing