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私はubuntu12.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 に答える