gpt4 book ai didi

c - 调用函数以将 double 输入数组成员时出现段错误,之前的输入有效

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:17 26 4
gpt4 key购买 nike

对于 C 中的类作业,我的任务是编写一个程序,该程序创建一个包含 4 个成员的结构,名字、姓氏、小时数和工资率,在创建后,它输入用户输入 4 个成员 3次,所以我们有 3 名员工。当程序运行时,我可以输入第一个员工的第一个和最后一个以及小时数,但是当涉及到工资率的输入时,这会导致段错误。这是我的代码

#include <stdio.h>
#include <stdlib.h>
#define SIZE 3

struct employee
{
char first[30];
char last[30];
double hours;
double payrate;
};

typedef struct employee emp;

int main(void)
{
system("clear");

emp emp[SIZE];

int counter;

for (counter = 0; counter < 3; counter++)
{
input(&emp[counter]);
}

for (counter = 0; counter < 3; counter++)
{
output(emp[counter]);
}

printf("%10s %10s %10s %10s", "First", "Last", "Hours", "Rate");
puts("------------------------");

for (counter = 0; counter < SIZE; counter++)
{
printf("%s %s %d %d \n", emp[30].first, emp[30].last, emp[10].hours, emp[10].payrate);
}

return 0;
}

void output(struct employee emp)
{
printf("First: %s \n", emp.first);
printf("Last: %s \n", emp.last);
printf("Hours: %d \n", emp.hours);
printf("Payrate: %d \n", emp.payrate);
puts("********************************");
}

void input(emp * ptr)
{
printf("Enter first name: ");
scanf("%s", ptr->first);

printf("Enter last name: ");
scanf("%s", ptr->last);

printf("Enter hours worked: ");
scanf("%d", ptr->hours);

printf("Enter payrate: ");
scanf("%d", ptr->payrate);

puts("********************************");
}

编辑#1 我编辑了一些代码,它一直工作到表格的一部分,它现在可以工作,但在表格的前两列中给出了 0.0000,这里是编辑后的代码。

#include <stdio.h>
#include <stdlib.h>
#define SIZE 3

struct employee
{
char first[30];
char last[30];
double hours;
double payrate;
};

typedef struct employee emp;

int main(void)
{
system("clear");

emp emp[SIZE];

int counter;

for (counter = 0; counter < SIZE; counter++)
{
input(&emp[counter]);
}

for (counter = 0; counter < SIZE; counter++)
{
output(emp[counter]);
}

printf("%10s %10s %10s %10s", "First", "Last", "Hours", "Rate");
puts("\n ------------------------");

for (counter = 0; counter < SIZE; counter++)
{
printf("%s %s %lf %lf \n", emp[30].first, emp[30].last, emp[10].hours, emp[10].payrate);
}

return 0;
}

void output(struct employee emp)
{
printf("First: %s \n", emp.first);
printf("Last: %s \n", emp.last);
printf("Hours: %f \n", emp.hours);
printf("Payrate: %f \n", emp.payrate);
puts("********************************");
}

void input(emp * ptr)
{
printf("Enter first name: ");
scanf("%s", ptr->first);

printf("Enter last name: ");
scanf("%s", ptr->last);

printf("Enter hours worked: ");
scanf("%lf", &ptr->hours);

printf("Enter payrate: ");
scanf("%lf", &ptr->payrate);

puts("********************************");
}

最佳答案

第一个问题是 scanf 的第二个参数应该是一个指针。对于您的字符串,它们是数组,并且基本上被视为指针,因此它们可以正常工作。您需要使用 & 运算符为其提供 double 地址。下一个问题是转换说明符“%d”用于有符号整数转换。对于 double ,请使用“%lf”,因为 double 是长 float 。

例子:

scanf("%lf", &ptr->hours);

关于c - 调用函数以将 double 输入数组成员时出现段错误,之前的输入有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55996705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com