0

这是C上的代码:

这是功能:

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

struct worker
{
    char firstName;
    char lastName;
    char middleName;
    int age;
    float height;
};

void enterData();
void displayData();
void makeCalc();

struct worker *b;
int count;

int main(void)
{
    enterData();
    displayData();
    makeCalc();
    free(b);
    return 0;
}

void enterData()
{
    char firstName;
    char lastName;
    char middleName;
    int age;
    float height;


    printf("Количество работников: \n");
    scanf("%d", &count);

    if(count <= 0){
        exit(0);
    }

    b = (struct worker *)malloc(count*sizeof(struct worker));


    for(int i = 0; i<count; i++){
        printf("Введите имя, фамилию, отчестве, возраст и рост через пробел: \n");
        scanf("%s%s%s%d%f", &firstName, &lastName, &middleName, &age, &height);
        struct worker a = (struct worker) {firstName, lastName, middleName, age, height};
        b[i] = a;
    }

}

如果显示程序,则在这部分运行时Segmentation fault (core dumped)

for(int i = 0; i<count; i++){
            printf("Enter name, surname and middle name: \n");
            scanf("%s%s%s%d%f", &firstName, &lastName, &middleName, &age, &height);
            struct worker a = (struct worker) {firstName, lastName, middleName, age, height};
            b[i] = a;

这可能是什么原因?我是 C 新手;

PS 我在 ubuntu 12.04 上使用 GCC 编译器。和通用的文本编辑器。

4

3 回答 3

1

有你的问题:

    scanf("%s%s%s%d%f", &firstName, &lastName, &middleName, &age, &height);

您扫描字符串,但您的变量只是字符:

   char firstName;
   char lastName;
   char middleName;
于 2012-12-04T13:35:02.993 回答
1

我想你可能想为你的数据提供一个缓冲区:

char firstName[SOME_BIG_ENOUGH_SIZE];

而不是单个字符:

char firstName;
于 2012-12-04T13:35:40.240 回答
0

问题是您在声明中使用 char 类型并%s在 scanf中使用

必须更改这些以保持字符串

 char firstName;
 char lastName;
 char middleName;

应该改为

char firstName[MAX]; //where MAX is any convenient high value.
char lastName[MAX];
char middleName[MAX];
于 2012-12-04T13:36:28.310 回答